Wednesday, March 4, 2015

Please specify a doctor type

When inserting a aids.RefundConfirmation: Lino now says Please specify a doctor type (“Bitte geben Sie die Art des Arztes an”) if user leaves both doctor and doctor_type blank (instead of raising an IntegrityError (1048, "Column 'doctor_type_id' cannot be null")).

‘Role’ object has no attribute ‘language’

If the recipient of an aid confirmation is a lino.modlib.contacts.models.Role, Lino no longer raises an AttributeError “‘Role’ object has no attribute ‘language’”

Combinations of two

I started to work on #118. The first part is a general problem: how to find duplicate persons in a database. This is done by lino.modlib.dedupe, but until now it was just a proof of concept which needed to be optimized. That’s done now. See Avoiding duplicate clients.

Side effects:

  • not only persons but all partners

  • uses a new database field phonetic_name

  • Use a model mixin and override full_clean.

This is an example case where Django’s signals would cause a lot of trouble and hacking while overriding a model mixin and full_clean is elegant.

The optimized algorithem uses combinations:

>>> from itertools import combinations
>>> [''.join(c) for c in combinations(['a', 'b'], 2)]
['ab']
>>> [''.join(c) for c in combinations(['a', 'b', 'c'], 2)]
['ab', 'ac', 'bc']
>>> [''.join(c) for c in combinations(['a', 'b', 'c', 'd'], 2)]
['ab', 'ac', 'ad', 'bc', 'bd', 'cd']

Lino and Django 1.7

Mahmoud correctly discovered Daniel’s blog entry about how to get rid of the warning “1_6.W001”. Added a TEST_RUNNER setting to lino.projects.std.settings.