Compare commits

...

28 commits
main ... main

Author SHA1 Message Date
berhsi 82cbf0a4a7 Merge pull request 'Backslash-Korrektur' (#10) from qbi/rechnung:sed-backslash into main
Reviewed-on: berhsi/rechnung#10
2024-02-05 18:33:11 +01:00
qbi 3364cad3ec Überflüssige Semikola im Kommentar gelöscht 2024-02-05 18:29:45 +01:00
qbi ef70318e30 Je ein ';' wird durch einen '\' ersetzt
Neben den Backslashes am Zeilenende gab es Backslashes innerhalb des
Textes.
Beispiel:
- Datum: 05.\,02.\,2024
- Straße: Gitstr.\,42

Mit diesen Backslashes kam die Ersetzung nicht gut zurecht.

Daher habe ich das so geändert, dass jedes Semikolon (';') durch einen
Backslash ersetzt wird. Im Datum und Straßen muss nun auch ein Semikolon
stehen. Damit klappt die Ersetzung besser.
2024-02-05 18:28:42 +01:00
berhsi d15355b689 Merge pull request 'template.ltx angepasst' (#9) from qbi/rechnung:main into main
Reviewed-on: berhsi/rechnung#9
2024-02-04 18:53:37 +01:00
qbi 691f1ff563 Ersetzung der Anschrift geändert
Bisher war die Ersetzung der Anschrift nicht perfekt. Hier wurde teils zuviel
gefressen. Mit der Änderung klappt bei meinen Tests alles. Eventuell muss das
aber nochmal angepasst werden.
2021-10-10 13:40:30 +02:00
qbi feb3b49abb Einleitung eingebaut
Im Text der Rechnung muss es zu Anfang eine Einleitung geben. Dort kann
man auf Verträge, Absprachen, Beauftragungen etc. Bezug nehmen. Ich habe
das gemäß dem Muster der POSITION eingebaut.
2021-10-10 12:15:59 +02:00
qbi 72bdf42172 Quoting korrigiert 2021-07-28 19:29:12 +02:00
qbi ad5ba83adf Variable benutzt 2021-07-28 19:28:07 +02:00
qbi bb884d5e62 Merge branch 'main' of gitea:berhsi/rechnung 2021-07-28 19:26:24 +02:00
qbi 09722922b9 Option i ergänzt 2021-06-06 10:29:38 +02:00
qbi 7c5c93444c Zuerst muss /dev/null kommen 2021-06-06 10:21:54 +02:00
qbi f4e187c048 Doppelte Verneinung entfernt 2021-06-06 10:06:37 +02:00
qbi df55d17113 Variablen quoten 2021-06-06 10:04:24 +02:00
qbi bf2ca2c96b 1 gelöscht
Die einzelnen Felder sind nicht nummeriert. Die "1" war vermutlich ein Artefakt des früheren Formats.
2021-06-06 10:01:01 +02:00
+++ b0baeaebe3 todo angepaßt 2021-06-04 08:53:47 +02:00
+++ 98a3abd1ee 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
2021-06-03 18:45:41 +02:00
+++ c43c2cb7a1 fehlerausgabe verbessert, kleine korrekturen
wenn das kompilieren fehlschlägt wird im log nach fehlermeldungen gesucht und
diese ausgegeben. ein - nach /bin/sh verhindert parameterübergaben. ifs wird
explitiet gesetzt.
2021-06-03 10:28:56 +02:00
+++ c2484f3015 installation von rechnung.sty nicht mehr interaktiv 2021-06-02 23:20:52 +02:00
bernd 3786fe767a bugfix, readme angepaßt 2021-05-29 00:26:34 +02:00
bernd 1ae6b0525c silent-modus eingebaut 2021-05-29 00:04:22 +02:00
bernd e7b2d5bd69 option zum anzeigen der version eingefügt 2021-05-28 23:49:46 +02:00
bernd 5e18587864 readme angepaßt 2021-05-28 23:38:07 +02:00
bernd 26c43d7618 octorech.lco entfernt, kleine änderungen 2021-05-28 23:29:37 +02:00
qbi 8654e69a4a Merge branch 'submo-merge' 2021-05-28 23:13:11 +02:00
qbi 074650c9b0 Zu viele Backslashes 2021-05-28 23:02:45 +02:00
qbi 1c4a695cae SEDFILE soll nicht angehangen werden 2021-05-28 23:01:32 +02:00
qbi 7bf85fc94b Installation von rechnung.sty entfernt 2021-05-28 22:55:05 +02:00
qbi c5fb722e40 Submodul rechnung.sty hinzugefügt 2021-05-05 23:18:59 +02:00
7 changed files with 272 additions and 112 deletions

3
.gitmodules vendored Normal file
View file

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

View file

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

View file

@ -15,19 +15,34 @@ Latexcompiler eine Rechnung im PDF-Format erstellt.
Installation
------------
Kopieren Sie die Dateien template.ltx, octorech.lco, rechnung.ini und
Kopieren Sie die Dateien template.ltx, absender.lco, rechnung.ini und
rechnung.{sh|py} in ein Verzeichnis Ihrer Wahl. Passen Sie die Dateien
rechnung.ini und octorech.lco an Ihre Bedürfnisse an.
rechnung.ini und absender.lco an Ihre Bedürfnisse an.
Optionen
--------
-h
Gibt eine kurze Hilfe aus und beendet das Programm
Gibt eine kurze Hilfe aus und beendet das Programm.
-f kundendatei
Die Kundendaten werden aus 'kundendatei' gelesen und 'rechnung.ini' wird
ignoriert.
Die Kundendaten werden aus 'kundendatei' gelesen.
-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,12 +1,13 @@
# file: rechnung.ini
#
# Bei adresse1 muss am Ende ein Semikolon (;) stehen. Dies sorgt dafür, dass im
# Bei adresse1 müssen an jedem Zeilenumbruch zwei Semikola (;;) stehen. Dies sorgt dafür, dass im
# LaTeX-Code dies durch zwei Backslashes ersetzt wird.
[start]
kunde=Firma A
adresse1= Strasse A; 012345 Stadt A;
adresse= Strasse A;; 012345 Stadt A;;
anrede=Sehr geehrte Damen und Herren,
einleitung=anbei die Rechnung
anzahl=1
position=Dienstleistung A mit etwas mehr Text
short=Leistung A
@ -16,8 +17,9 @@ lfdnr=1
[start]
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,
einleitung=Wie in Vertrag 08/15 vereibart berechne ich
anzahl=11
position=Dienstleistung B mit mehr noch viel Text
short=Leistung B
@ -27,8 +29,9 @@ lfdnr=1
[start]
kunde=Herr C
adresse=Strasse C; 12345 Stadt C;
adresse=Strasse C;; 12345 Stadt C;;
anrede=Sehr geehrter Herr C,
einleitung=anbei die Rechnung
anzahl=1
position=Dienstleistung C mit ganzen vielen Nebenpositionen damit in der Tabelle mehrere Zeilen sind
short=Leistung C

View file

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

1
rechnung_sty Submodule

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

View file

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