From e20a8cb48b53c514262da387889b79a8394e2244 Mon Sep 17 00:00:00 2001 From: Sebastian Pipping Date: Thu, 19 Jan 2012 16:05:02 +0100 Subject: [PATCH] Add preislister quickhack --- preislister/main.py | 118 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 118 insertions(+) create mode 100755 preislister/main.py diff --git a/preislister/main.py b/preislister/main.py new file mode 100755 index 0000000..03367b9 --- /dev/null +++ b/preislister/main.py @@ -0,0 +1,118 @@ +#! /usr/bin/env python +# -*- coding: utf-8 -*- +# +# Copyright (C) 2012 Sebastian Pipping +# 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)