:date: 2018-06-18

=====================
Monday, June 18, 2018
=====================

OpenUI5 ui advancing
====================

Hamza and I had a hangouts session where we dived into the delete
action using OpenUI

What to do after deleting a record? The current behaviour in ExtJS is
more or less mature, and something similar seems okay for OpenUI as
well: Remain in the detail window and go to the next row. If this was
the last row of the table, go to the previous row. If the table has
become empty (no more records), close the detail window after
displaying a suitable message.  We explored an edge case of the
DeleteSelected action : in tera1 demo project (Lino Tera), the detail
layout for life groups is different to the detail layout of an
individual therapy ("life group" and "individutal" therapy are two
choices in the ActivityLayouts choicelist). This logic is defined by
:meth:`lino_xl.lib.courses.Course.get_detail_action`. If I open
"Therapies held by me" (or "Therapies managed by me"), Lino shows a
mixture of therapies from different course areas. The detail layout to
use depends on the current row. If I go to the detail view and delete
one of them, Lino must potentially "switch to another layout".

How to implement this behaviour, depends on the user interface. The
DeleteSelected action should just delete the record and return
success-or-not.

The detail_handler_name key in the action response of DeleteSelected
is rather a hack used for ExtJS. It means "in case you are in detail
view, I remind you the name of the current detail view". I think we
should try to not use this in openui and instead have it remind that
name itself.

grid.changes.ChangesByMaster was not available as a route because the
controller defined only master reports. Seems that there must also be
a route for slave tables.  You must change what Lino returns in
eval_js. This is easily done, you just need to override the
request_handler() method and the instance_handler() method of the
OpenUI renderer. Currently you let Lino return a string like
"Lino.grid.changes.ChangesByMaster(...)", then the JS client modifies
this string and defines a wrapper function window_action()... but all
this is not needed if you so that they return the "openui5 js
implementation" for that action.

Lino Tera continued
===================

I continued to work on :ticket:`2162` for :ref:`tera`.

- Status der importierten Anwesenheiten ist immer leer.  Status
  "Verpasst" heißt "abwesend" in Lino.

In :ref:`tera` we have an additional field "Payment mode"
(Zahlart) with four values::

    B Bar           Cash (paid)
    Z Zu kassieren  Cash to pay
    R Rechnung      Invoice
    G Kostenlos     Free

In TIM this field was on both `cal.Event` and `cal.Guest`, but I guess
that in Lino we will put it only on `cal.Guest` because on Event it
was rather a fallback value for the field on Guest.

This field might be useful for other applications.  Of course not for
Welfare and Avanti because the clients don't pay there.  In Voga the
clients do pay, but we also don't want it because in Voga they always
get an invoice.  This field is needed only when the course leaders
have their individual "decentralized" accounting which enables cash
payments by the clients.  Cash payments introduce additional
complexity because the course leaders must introduce the collected
money into the central accounting system.  So actually next to
`payment_mode` we also have two more fields `amount_to_pay` and
`amount_received`.

- Wird das bisherige System mit der Kassenverwaltung durch Therapeuten
  beibehalten?