# Tuesday, February 23, 2016¶

I am still in the final sprint for Lino Voga.

## The first release with splitted Lino¶

I upgraded Lino Voga on the Die Eiche server in order to show to Alexa my first suggestion for #787. Some translations and layout optimizations.

When running git pull I still had some messages of style rm: remove write-protected regular file './lino_xl.lib.courses/models.pyc'? which I now hopefully fixed by doing:

$sudo chown -R admin:admin ~/repositories  As expected, restoring the snapshot failed with a traceback: $ python manage.py run snapshot/restore.py
...
Traceback (most recent call last):
...
File "cal_room.py", line 4, in <module>
File "snapshot/restore.py", line 437, in create_cal_room
...
TypeError: 'tariff_id' is an invalid keyword argument for this function


This was because I did not write a migrator for yesterday’s database changes. I didn’t do this because it is easier to just edit the restore.py file. That file contains:

def create_cal_room(id, name, company_id, contact_person_id, contact_role_id, tariff_id, calendar_id):
kw = dict()
kw.update(id=id)
if name is not None: kw.update(bv2kw('name',name))
kw.update(company_id=company_id)
kw.update(contact_person_id=contact_person_id)
kw.update(contact_role_id=contact_role_id)
kw.update(tariff_id=tariff_id)
kw.update(calendar_id=calendar_id)
return cal_Room(**kw)


I just needed to change the line with tariff_id into:

kw.update(fee_id=tariff_id)


And similar for create_courses_line and create_courses_course.

En passant I found a workaround for #788. The problem was caused by the following virtual column:

@dd.virtualfield(dd.HtmlBox(_("Participant")))
def pupil_info(cls, self, ar):
elems = [ar.obj2html(self.pupil,
self.pupil.get_full_name(nominative=True))]
elems += [', ']
elems += join_elems(
sep=', ')
return E.div(*elems)


The real guilty is lino.utils.html2odf who does not know how to convert this to valid ODF, but we can avoid our problem by changing the last line into:

return E.p(*elems)


## Linking places to a map image¶

Google Maps knows about Vana-Vigala. And of course Google Maps has an API to embed this map into an iframe <iframe>. But that API is probably not free and I won’t invest my time into this unless somebody forces me (e.g. using money ;-)

But also OpenStreetMap knows Vana-Vigala, and they have a quick HTML snippet with an <iframe>:

Bigger map

So it should be possible to automatically include such a picture on a virtual field in a Lino application.

But why is the village border missing on the iframe while it is visible when using the link to the “relation”?

## Inheriting quick search fields¶

I changed the kernel’s (lino.core.kernel) behaviour about how quick_search_fields should be inherited. Until now they were never inherited, even not from an abstract base class. Now they are always inherited. If you want to not inherit them from a parent using standard MRO, then you must set that field explictly to None.

## Manually settable simulated date¶

Until now we had lino.core.site.Site.the_demo_date which is useful when generating demo data.

Now we also have lino.modlib.system.models.SiteConfig.simulate_today which is useful e.g. when Alexa needs to generate invoices à postériori.