forked from berhsi/rechnung
Compare commits
28 commits
Author | SHA1 | Date | |
---|---|---|---|
82cbf0a4a7 | |||
3364cad3ec | |||
ef70318e30 | |||
d15355b689 | |||
691f1ff563 | |||
feb3b49abb | |||
72bdf42172 | |||
ad5ba83adf | |||
bb884d5e62 | |||
09722922b9 | |||
7c5c93444c | |||
f4e187c048 | |||
df55d17113 | |||
bf2ca2c96b | |||
|
b0baeaebe3 | ||
|
98a3abd1ee | ||
|
c43c2cb7a1 | ||
|
c2484f3015 | ||
3786fe767a | |||
1ae6b0525c | |||
e7b2d5bd69 | |||
5e18587864 | |||
26c43d7618 | |||
8654e69a4a | |||
074650c9b0 | |||
1c4a695cae | |||
7bf85fc94b | |||
c5fb722e40 |
7 changed files with 272 additions and 112 deletions
3
.gitmodules
vendored
Normal file
3
.gitmodules
vendored
Normal file
|
@ -0,0 +1,3 @@
|
|||
[submodule "rechnung_sty"]
|
||||
path = rechnung_sty
|
||||
url = https://git.nr18.space/qbi/rechnung.sty
|
11
TODO.txt
11
TODO.txt
|
@ -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.
|
||||
|
||||
|
|
25
readme.txt
25
readme.txt
|
@ -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.
|
||||
|
|
11
rechnung.ini
11
rechnung.ini
|
@ -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
|
||||
|
|
253
rechnung.sh
253
rechnung.sh
|
@ -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,62 +96,91 @@ print_start() {
|
|||
|
||||
msg=$*
|
||||
|
||||
if [ "$VERBOSITY" -eq 0 ]; then
|
||||
return
|
||||
else
|
||||
if [ "$COLORED_OUTPUT" -eq 1 ]; then
|
||||
printf "%s[+]%s %s" "$GREEN" "$NORMAL" "$msg"
|
||||
else
|
||||
printf " Failed"
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
print_failed() {
|
||||
|
||||
msg=$*
|
||||
|
||||
if [ "$VERBOSITY" -eq 0 ]; then
|
||||
return
|
||||
else
|
||||
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 [ "$VERBOSITY" -eq 0 ]; then
|
||||
return
|
||||
else
|
||||
if [ "$COLORED_OUTPUT" -eq 1 ]; then
|
||||
printf "%s OK%s\n" "$GREEN" "$NORMAL"
|
||||
else
|
||||
printf " OK\n"
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
print_deko() {
|
||||
|
||||
msg=$*
|
||||
|
||||
if [ "$VERBOSITY" -eq 0 ]; then
|
||||
return
|
||||
else
|
||||
if [ "$COLORED_OUTPUT" -eq 1 ]; then
|
||||
echo "${BLUE}${msg}${NORMAL}"
|
||||
else
|
||||
echo "$msg"
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
print_info() {
|
||||
|
||||
msg=$*
|
||||
|
||||
if [ "$VERBOSITY" -eq 0 ]; then
|
||||
return
|
||||
else
|
||||
if [ "$COLORED_OUTPUT" -eq 1 ]; then
|
||||
echo "${GREEN}[+]$NORMAL $msg"
|
||||
else
|
||||
echo "[-] $msg"
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
print_warn() {
|
||||
|
||||
msg=$*
|
||||
|
||||
if [ "$VERBOSITY" -eq 0 ]; then
|
||||
return
|
||||
else
|
||||
if [ "$COLORED_OUTPUT" -eq 1 ]; then
|
||||
echo "${YELLOW}[-]$NORMAL $msg"
|
||||
else
|
||||
echo "[-] $msg"
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
print_error() {
|
||||
|
@ -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,13 +368,10 @@ 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 ..."
|
||||
|
||||
if git clone $STY_URL >/dev/null 2>&1; then
|
||||
if $GIT_BIN clone "$STY_URL" >/dev/null 2>&1; then
|
||||
print_ok
|
||||
cd rechnung
|
||||
mkdir -p "$STY_HOME/rechnung/"
|
||||
|
@ -260,23 +384,18 @@ install_sty() (
|
|||
if cp rechnung.sty "$STY_HOME/rechnung/"; then
|
||||
print_ok
|
||||
else
|
||||
print_failed
|
||||
exit 1
|
||||
failed_and_exit 3
|
||||
fi
|
||||
cd "$old_pwd"
|
||||
rm -rf rechnung/
|
||||
print_info "Paket $STY_RECHNUNG erfolgreich installiert"
|
||||
else
|
||||
print_error "Installation fehlgeschlagen"
|
||||
exit 5
|
||||
exit 4
|
||||
fi
|
||||
else
|
||||
print_error "Klonen des Repos fehlgeschlagen"
|
||||
exit 6
|
||||
fi
|
||||
else
|
||||
print_info "Beende Progrann"
|
||||
exit 7
|
||||
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"
|
||||
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
|
||||
|
||||
# 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,10 +584,14 @@ 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."
|
||||
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
|
||||
while IFS= read -r rawline
|
||||
|
@ -458,4 +600,3 @@ do
|
|||
proced_ini_line "$LINE_BUFFER"
|
||||
done < "$RECHNUNGSFILE"
|
||||
|
||||
|
||||
|
|
1
rechnung_sty
Submodule
1
rechnung_sty
Submodule
|
@ -0,0 +1 @@
|
|||
Subproject commit 6d0d24599de1cf509ccef42a398d06519f890cc4
|
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue