20130201

Converting HTML to ODF text chunks

Na das war vielleicht mal ein Bug mit unerwartet viel Arbeit: die Tx25 hatten beim Ausdruck immer eine leere Kolonne “Information”.

Zuerst musste ich mal mein lokales Skript print_tx25.py (sh. ../2012/0704) reparieren, das einiges an Entwicklung verpasst hatte. Deshalb jetzt die Methode run_action_from_console.

Das eigentliche Problem war dann auch nicht ohne: html2odf, vertrug es nicht, wenn value2html ein fertiges <TD><P>…</P></TD> zurückgab.

In der Default.odt standen Datum und Uhrzeit als “fixes” Feld. Dort muss natürlich das Druckdatum stehen.

Two scoops of Django

I’d like to read the book Two scoops of Django, and I’m ready to pay 12€ for it, but I live in Estonia where credit cards aren’t used for national payments because we have electronic id cards. Zed Shaw’s comment “Ha ha, I learned something in the first chapter. Awesome.” was probably the decisive one for me :-)

Pre-release rush

  • Found and fixed some more bugs in lino.utils.appy_pod. One visible result is that total lines in .pdf, .odt and .rtf output are now also rendered using bold text.

  • I renamed the html2odftext function to html2odf and moved it from lino.utils.appy_pod to a separate module lino.utils.html2odf.

  • Optimized lino.ui.extjs3.views.ajax_error() for Django Validation Errors. Users now finally see messages like this:

    Datumsbereich überschneidet sich mit Art.60§7-Konvention #12

    Until now the same message has been like this:

    [u’Datumsbereich \xfcberschneidet sich mit Art.60\xa77-Konvention #12’]”

    The fact that nobody has complained about this during probably more than a year probably shows that Lino users use Lino for working with it and not (yet) for making money by selling it.

  • Lino failed with a traceback on showing the detail of a pcsw.Client. Now it displays them without failur (though very funnily because it doesn’t yet know how to use tabs). lino.ui.extjs3.ext_ui.PlainRenderer, lino.ui.extjs3.ext_elems.FieldElement.value_from_object

Continued on lino.projects.belref

Upps, ich habe versehentlich ein bisschen an lino.projects.belref weiter gearbeitet, obwohl es zur Zeit eigentlich dringendere Dinge gibt…

… aber mir war eine Idee gekommen, wie ich das mit dem Fachwortschatz in lino.modlib.concepts zu strukturieren gedenke: ein neues Modell Link und neue ChoiceList LinkTypes. Aber das ist alles Spielerei und noch lange nicht fertig. Vor allem fehlt ein Suchfeld. Und der Inhalt der Hauptseite ist mir auch noch nicht klar…

Lino Cosi braucht eine Währung

Für die Online-Demos habe ich site_config_defaults auf dict(default_build_method=’appypdf’) gesetzt. Der hard-codierte Standardwert appyodt soll bleiben, weil nicht jeder gleich einen LibreOffice-Daemon installieren will. Aber wer’s getan hat, kriegt eigentlich lieber PDFs statt ODTs beim Ausdruck.

Wenn man in der Demo-Datenbank eine Verkaufsrechnung ausdruckt, fallen zwei Dinge besonders auf:

  • insgesamt sollte sich mal jemand mit ein paar Stunden Liebe dransetzen und das Gesamtdesign überarbeiten. Denn momentan ist das eher ein Aua- als ein Aha-Effekt.
  • Es fehlt jegliche Währungsangabe.

Und das stimmt: seit dem Umstieg auf Euros ist das zwar für mich persönlich nicht mehr akut, aber Lino Cosi sollte doch zumindest eine Notion von Grundwährung haben.

Da gibt es python-money, ein sauber programmiertes wohlgepflegtes kleines übersichtliches Modul. Schön ist die Implementierung eines MoneyField für Django. Aber für Lino Cosi wäre das Overkill: wir brauchen die Währung nicht mehr pro Dokument ändern zu können.

Was mir weniger gefällt: dass die hardcodierte Liste aller Währungen der Welt da nur mit englischen Bezeichnungen steht. Hier ein Auszug:

CURRENCY['KWD'] = Currency(code='KWD', numeric='414', name='Kuwaiti Dinar', countries=['KUWAIT'])
CURRENCY['EUR'] = Currency(code='EUR', numeric='978', name='Euro', countries=['ANDORRA', 'AUSTRIA', 'BELGIUM', 'FINLAND', 'FRANCE', 'FRENCH GUIANA', 'FRENCH SOUTHERN TERRITORIES', 'GERMANY', 'GREECE', 'GUADELOUPE', 'IRELAND', 'ITALY', 'LUXEMBOURG', 'MARTINIQUE', 'MAYOTTE', 'MONACO', 'MONTENEGRO', 'NETHERLANDS', 'PORTUGAL', 'R.UNION', 'SAINT PIERRE AND MIQUELON', 'SAN MARINO', 'SLOVENIA', 'SPAIN'])
CURRENCY['CHF'] = Currency(code='CHF', numeric='756', name='Swiss Franc', countries=['LIECHTENSTEIN'])

Nee, das ist so nicht internationalisierbar.

Für Lino Cosi brauche ich erstmal einfach nur eine ChoiceList mit ein paar Währungen, und in der SiteConfig dann ein Feld, wo man die Grundwährung eingibt.