Add preislister quickhack

This commit is contained in:
Sebastian Pipping 2012-01-19 16:05:02 +01:00
parent 7bf15a1470
commit e20a8cb48b
1 changed files with 118 additions and 0 deletions

118
preislister/main.py Executable file
View File

@ -0,0 +1,118 @@
#! /usr/bin/env python
# -*- coding: utf-8 -*-
#
# Copyright (C) 2012 Sebastian Pipping <sebastian@pipping.org>
# Licensed under GPL v3 or later
from __future__ import print_function
import sys
import simplejson as json
import tempfile
import os
import subprocess
import shutil
sys.path.insert(0, '../client-barcode') # TODO
from freitagslib.network import _request
from freitagslib.item import Item
_NAME_BLACKLIST = ('foo', )
_BASENAME = 'preisliste'
def write_utf8(f, text):
f.write(unicode(text).encode('utf8'))
def escape(text):
return text.replace('&', '\\&')
def german(phormat, value):
return (phormat % value).replace('.', '{,}')
if __name__ == '__main__':
if len(sys.argv) != 2:
print('USAGE:\n ./%s OUTPUT.pdf' % os.path.basename(sys.argv[0]))
sys.exit(1)
output_filename = sys.argv[1]
content = _request('buyable/item/', None, method='GET')
doc = json.loads(content)
items = [Item(e) for e in doc]
tempdir = tempfile.mkdtemp()
preisliste_tex = os.path.join(tempdir, _BASENAME + '.tex')
preisliste_pdf = os.path.join(tempdir, _BASENAME + '.pdf')
f = open(preisliste_tex, 'w')
f.write(r"""
\documentclass[a4paper,10pt]{scrartcl}
\usepackage[ngerman]{babel}
\usepackage[utf8]{inputenc}
\usepackage{fullpage}
\usepackage{booktabs}
\usepackage{eurosym}
% Reduce vertical offset
\addtolength{\textheight}{\voffset}
\setlength{\voffset}{0cm}
\setlength{\voffset}{-1cm}
\addtolength{\textheight}{1cm}
% No footskip
\addtolength{\textheight}{\footskip}
\setlength{\footskip}{0cm}
% No footskip
\addtolength{\textheight}{\footskip}
\setlength{\footskip}{0cm}
% No page number
\pagestyle{empty}
\begin{document}
\begin{flushright}Stand \today\end{flushright}
\vspace*{-4.6ex}
%
\begin{tabular}{l@{\quad}rr}
\toprule
Pfand & \multicolumn{1}{c}{Preis} & Artikel \\
\midrule
""")
first = True
for i in sorted(items, cmp=lambda x,y: cmp(x.name.lower(), y.name.lower())):
if i.name in _NAME_BLACKLIST:
continue
latex_name = escape(i.name)
latex_name = '\\textbf{%s}%s' % (latex_name[0], latex_name[1:])
latex_price = german('\\textbf{%.2f} \\euro', i.price)
latex_deposit = '~' if i.deposit == 0 else german('+ %.2f \\euro', i.deposit)
# write_utf8(f, '%s & %s & %s \\\\\\midrule\n' % (latex_deposit, latex_price, latex_name))
write_utf8(f, '%s%s & %s & %s \\\\\n' % (
'' if first else '\\midrule\n',
latex_name, latex_price, latex_deposit))
first = False
f.write(r"""\bottomrule
\end{tabular}
\end{document}
""")
f.close()
ret = subprocess.call(['pdflatex', _BASENAME + '.tex'], cwd=tempdir)
if ret != 0:
print("Call to LaTeX failed with code %d." % ret)
sys.exit(ret)
print('Moving output to "%s"...' % output_filename)
shutil.move(preisliste_pdf, output_filename)
print('Wiping directory "%s"...' % tempdir)
shutil.rmtree(tempdir)