Thursday, January 22, 2015

You are busy with … (#61)

Wow, Lino has two new features.

After meditating about how Lino Welfare should inform users that they “are busy with” a client. Yesterday I wrote that they want to be able to close such a meeting with a single click from their main page (plus another click on a confirmation naming all these guests). And they want it even if there’s more than one guest.

This is a new kind of welcome message. We don’t want to see a table of “all my active meetings” because that table would never show more than one row. So makes no sense here to bind the message handler (the callable which builds the message) to an existing Table.

Until now, welcome messages were defined by writing a method get_welcome_messages on some table. This method is still useful if your message is of style “you have x rows in foos” and clicking on it would open that table.

But now you can alternatively use the new method dd.add_welcome_handler to define welcome messages which are not bound to any Table.

Our first use case is lino_welfare.modlib.cal.models.you_are_busy_messages() which does exactly what we want for Lino Welfare.

There was another problem: The normal way to include into my welcome message, a button which invokes that action is something like:

ar.instance_action_button(evt.close_meeting)

But the CloseMeeting action is a workflow action (declared using lino.core.workflows.State.add_transition()), and thus it is not explicitly declared on the model using the usual method:

close_meeting = CloseMeeting()

So here is yet another (very subtle) feature: named workflow actions are now automatically declared on the model as a class attribute. So that I can now write above code.

Restore the Lino Welfare test suite

It’s time to have a look at the Lino Welfare test suite which had been neglected for some time after recent changes.

The shortcut fields are now defined in lino_welfare.projects.base by overriding setup_choicelists. That was necessary and is elegant, but it caused a subtle problem: lino_welfare.projects.chatelet wants these shortcut fields, too, but defines their own list of user profiles and cannot call super() for these because it has no lino_welfare.modlib.debts (and anyway it is not elegant to let the UserProfiles get filled just to reset them again afterwards). That’s why User profiles for Lino Welfare are no longer be defined in setup_choicelists but in the new Site method setup_user_profiles().

The test suite revealed one bug for which I am glad that I didn’t do a quick release this morning: Contract evaluation events got a duplicate Guest entry for their client.

I also continued on #60 (“Termine machen für Neuzugänge”, i.e. the AgentsByClient table), for which there is already a test case in reception : receive clients at a reception desk.

This ticket took so long because there was still a missing feature in the actions API.