1 Patron Checkout History Stored in a Dedicated Table
2 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
4 Patron checkout history is now stored in separate, dedicated database
5 table instead of being derived from the main circulation data. This
6 allows us to age/anonymize circulations more aggressively, since they
7 no longer need to stick around in cases where they represent a patron's
8 opt-in checkout history.
10 This has a number of patron privacy implications.
12 * Minimal metadata is stored in the new patron checkout history table,
13 so once the corresponding circulation is aged, the full set of
14 circulation metadata is no longer linked to a patron's reading history.
15 ** It is limited to checkout date, due date, checkin date, and copy data.
16 * Staff can no longer report on a patron's reading history.
17 ** While it is possible to build aggregate reports on reading history
18 data, it is not possible to report on which user an entry in the
19 history table belongs to. (The 'usr' column is hidden from the
21 * Staff can no longer retrieve a patron's reading history via API. Only
22 the user that owns the history data can access it.
23 * Though not implemented as part of this change, it will now be possible
24 with future development to truly remove specific items from a patron's
27 TPAC Patron History Disable Warning
28 +++++++++++++++++++++++++++++++++++
30 When disabling checkout and/or holds history in the TPAC Search and
31 History Preferences tab, patrons will be warned that the operation is
32 irreversible when history data exists that will be deleted as part of
38 Administrators should verify the CSV export of checkout history works after
39 deploying this change. If local changes were made to the CSV template,
40 the template will not be updated as part of this deployment. The stock
41 template was modified to handle gracefully NULL values for checkin_time.
46 ------------------------------------------------------------------------
47 - Returned: [% date.format(helpers.format_date(circ.checkin_time), '%Y-%m-%d') %]
50 + helpers.format_date(circ.checkin_time), '%Y-%m-%d')
51 + IF circ.checkin_time;
53 ------------------------------------------------------------------------