forked from berhsi/rechnung
installation von rechnung.sty hinzugefügt
This commit is contained in:
parent
17ddeb8df8
commit
dbf8c5db6d
128
rechnung.py
128
rechnung.py
|
@ -15,13 +15,11 @@ import subprocess
|
||||||
from datetime import date, timedelta
|
from datetime import date, timedelta
|
||||||
|
|
||||||
|
|
||||||
# Diverse Variablen
|
|
||||||
# -----------------
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class DISPLAY():
|
class DISPLAY():
|
||||||
'''
|
'''
|
||||||
|
Die Klasse für die Ausgabe von Logmeldungen im Terminal. Schaut, ob und
|
||||||
|
worauf die Environment Variable "COLORTERM" gesetzt ist, und gibt
|
||||||
|
entsprechend dem Ergebnis farbige Ausgabem.
|
||||||
'''
|
'''
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
self.red = '\x1B[31m'
|
self.red = '\x1B[31m'
|
||||||
|
@ -68,7 +66,7 @@ class DISPLAY():
|
||||||
param 2: string
|
param 2: string
|
||||||
'''
|
'''
|
||||||
if self.colorify == True:
|
if self.colorify == True:
|
||||||
print(f"{self.green}[+]{self.reset} {msg}", end=end)
|
print(f"{self.green}[+]{self.reset} {msg}", end=end, flush=True)
|
||||||
else: print(f"[+] {msg}", end=end)
|
else: print(f"[+] {msg}", end=end)
|
||||||
|
|
||||||
def WARN(self, msg, end='\n'):
|
def WARN(self, msg, end='\n'):
|
||||||
|
@ -90,6 +88,8 @@ class DISPLAY():
|
||||||
|
|
||||||
class KUNDE():
|
class KUNDE():
|
||||||
'''
|
'''
|
||||||
|
Die Klasse dient lediglich zum Halten der Informationen zu einem
|
||||||
|
Rechnungskunden.
|
||||||
'''
|
'''
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
self.kunde = ""
|
self.kunde = ""
|
||||||
|
@ -111,6 +111,7 @@ class RECHNUNG():
|
||||||
self.programm_version = "0.0.1"
|
self.programm_version = "0.0.1"
|
||||||
self.rechnungsfile = "rechnung.ini"
|
self.rechnungsfile = "rechnung.ini"
|
||||||
self.templatefile = "template.ltx"
|
self.templatefile = "template.ltx"
|
||||||
|
self.texhome = "/".join((os.environ["HOME"], "texmf"))
|
||||||
self.compiler = ""
|
self.compiler = ""
|
||||||
|
|
||||||
self.D = DISPLAY()
|
self.D = DISPLAY()
|
||||||
|
@ -130,7 +131,7 @@ class RECHNUNG():
|
||||||
'''
|
'''
|
||||||
param 1: string
|
param 1: string
|
||||||
'''
|
'''
|
||||||
self.D.INFO("Teste, ob {} ist lesbar ... ".format(filename), end="")
|
self.D.INFO("Teste, ob {} lesbar ist ... ".format(filename), end="")
|
||||||
response = os.access(filename, os.R_OK)
|
response = os.access(filename, os.R_OK)
|
||||||
if response == True:
|
if response == True:
|
||||||
self.D.TRUE()
|
self.D.TRUE()
|
||||||
|
@ -148,7 +149,6 @@ class RECHNUNG():
|
||||||
if response.returncode == 0:
|
if response.returncode == 0:
|
||||||
self.D.TRUE()
|
self.D.TRUE()
|
||||||
self.compiler = program
|
self.compiler = program
|
||||||
self.D.INFO(f"Setze {program} als Compiler.")
|
|
||||||
return True
|
return True
|
||||||
else:
|
else:
|
||||||
self.D.FALSE()
|
self.D.FALSE()
|
||||||
|
@ -345,21 +345,113 @@ class RECHNUNG():
|
||||||
fd.close()
|
fd.close()
|
||||||
return buffer
|
return buffer
|
||||||
|
|
||||||
|
def check_sty(self):
|
||||||
|
'''
|
||||||
|
Rechnung.sty steht nicht als Paket zur Verfügung. Es muß folglich
|
||||||
|
von Hand in den Suchpfad von Latex kopiert werden. Die Suche erfolgt
|
||||||
|
im aktuelle Verzeichnis und in ~/texmf/latex/tex/.
|
||||||
|
|
||||||
|
Achtung: Sollte das Programm später in einem Temporärem Verzeichnis
|
||||||
|
arbeiten, nutzt das Paket im aktuellen Verzeichnis nichts!
|
||||||
|
|
||||||
|
Achtung: Bei einer Installation wird eine vorhandene Datei
|
||||||
|
rechnung.sty ohne Nachfrage überschrieben!
|
||||||
|
|
||||||
|
returns: boolean
|
||||||
|
'''
|
||||||
|
package = "rechnung.sty"
|
||||||
|
|
||||||
|
self.D.INFO(f"Teste, ob rechnung.sty installiert ist ... ", end="")
|
||||||
|
if package in os.listdir():
|
||||||
|
self.D.TRUE()
|
||||||
|
return True
|
||||||
|
for (dirpath, dirnames, filenames) in os.walk(self.texhome):
|
||||||
|
if package in filenames:
|
||||||
|
self.D.TRUE()
|
||||||
|
return True
|
||||||
|
self.D.FALSE()
|
||||||
|
return False
|
||||||
|
|
||||||
|
def install_sty(self):
|
||||||
|
'''
|
||||||
|
Installiert auf Anfrage das Paket rechnung.sty.
|
||||||
|
'''
|
||||||
|
url= "https://github.com/tomka/rechnung"
|
||||||
|
rechnung_sty_dir = "/".join((self.texhome, "tex/latex/rechnung/"))
|
||||||
|
|
||||||
|
response = input(" Paket 'rechnung' installieren? (y/N): ")
|
||||||
|
if response not in ("y", "Y", "j", "J"):
|
||||||
|
self.D.INFO("Breche das Programm ab")
|
||||||
|
sys.exit(6)
|
||||||
|
|
||||||
|
self.D.INFO("Versuche das Paket 'rechnung' zu installieren.")
|
||||||
|
self.D.INFO("Nötige Programme: git, latex.")
|
||||||
|
for program in ("git", "latex"):
|
||||||
|
if self.check_program(program) is False:
|
||||||
|
self.D.ERROR(f"Kann {program} nicht finden. Breche ab.")
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
self.D.INFO("Klone Repo ... ", end="")
|
||||||
|
response = subprocess.run(["git", "clone", url],
|
||||||
|
capture_output=True,
|
||||||
|
timeout=180)
|
||||||
|
if response.returncode != 0:
|
||||||
|
self.D.FALSE()
|
||||||
|
self.D.ERROR(f"Fehler beim Klonen des Repos")
|
||||||
|
sys.exit(1)
|
||||||
|
else: self.D.TRUE()
|
||||||
|
|
||||||
|
old_pwd = os.environ["PWD"]
|
||||||
|
os.chdir("rechnung")
|
||||||
|
self.D.INFO("Versuche 'rechnung.sty' zu bauen ... ", end="")
|
||||||
|
response = subprocess.run(["latex", "rechnung.ins"], capture_output=True)
|
||||||
|
if response.returncode != 0:
|
||||||
|
self.D.FALSE()
|
||||||
|
sys.exit(1)
|
||||||
|
else: self.D.TRUE()
|
||||||
|
self.D.INFO(f"Lege Verzeichnis '{rechnung_sty_dir}' an ... ", end="")
|
||||||
|
response = subprocess.run(["mkdir", "-p", rechnung_sty_dir])
|
||||||
|
if response.returncode != 0:
|
||||||
|
self.D.FALSE()
|
||||||
|
sys.exit(1)
|
||||||
|
else: self.D.TRUE()
|
||||||
|
self.D.INFO(f"Kopiere 'rechnung.sty' nach '{rechnung_sty_dir}' ... ", end="")
|
||||||
|
response = subprocess.run(["cp", "rechnung.sty", rechnung_sty_dir])
|
||||||
|
if response.returncode != 0:
|
||||||
|
self.D.FALSE()
|
||||||
|
else: self.D.TRUE()
|
||||||
|
|
||||||
|
def preup(self):
|
||||||
|
'''
|
||||||
|
Führt einige Prüfungen durch.
|
||||||
|
- Kundendatei und Latex-Template müssen lesbar sein.
|
||||||
|
- Rechnung.sty muß installiert sein. Ist dies nicht der Fall,
|
||||||
|
sollte es von Github heruntergeladen und gebaut werden. Dafür
|
||||||
|
sind die Programme Git und latex nötig.
|
||||||
|
- Es wird ein Latex-Compiler gebraucht.
|
||||||
|
'''
|
||||||
|
|
||||||
|
for i in (self.rechnungsfile, self.templatefile):
|
||||||
|
self.check_readable(i)
|
||||||
|
|
||||||
|
for program in ('pdflatex', 'xelatex', 'luatex', 'latex'):
|
||||||
|
if self.check_program(program) == True:
|
||||||
|
break
|
||||||
|
|
||||||
|
if self.check_sty() is False:
|
||||||
|
self.install_sty()
|
||||||
|
|
||||||
|
if self.compiler == "":
|
||||||
|
self.D.ERROR("Kann keinen Compiler finden. Exit")
|
||||||
|
sys.exit(2)
|
||||||
|
|
||||||
|
|
||||||
def run(self):
|
def run(self):
|
||||||
'''
|
'''
|
||||||
'''
|
'''
|
||||||
|
|
||||||
self.print_header()
|
self.print_header()
|
||||||
|
self.preup()
|
||||||
for i in (self.rechnungsfile, self.templatefile):
|
|
||||||
self.check_readable(i)
|
|
||||||
|
|
||||||
for program in ('pdflatex', 'xelatex', 'luatex'):
|
|
||||||
if self.check_program(program) == True:
|
|
||||||
break
|
|
||||||
if self.compiler == "":
|
|
||||||
self.D.ERROR("Kann keinen Compiler finden. Exit")
|
|
||||||
sys.exit(2)
|
|
||||||
|
|
||||||
buffer = self.get_file_content(self.rechnungsfile)
|
buffer = self.get_file_content(self.rechnungsfile)
|
||||||
if buffer is None:
|
if buffer is None:
|
||||||
|
|
Loading…
Reference in a new issue