@@ -, +, @@
1 - Apply patches
2 - Update database and restart all, clear browser cache
3 - Load a patron in staff module
4 - Confirm you see and can add a preferred name
5 - Confirm the preferred name and first name now displays on patron details
6 - Remove first name from patron record and confirm it no longer shows
7 - Edit sysprefs BorrowerMandatoryFields and BorrowerUnwantedFields to confirm you can make
new field required or hidden
8 - Sign in as patron to opac
9 - Confirm preferred name shows
---
Koha/Database/Columns.pm | 1 +
Koha/Patron.pm | 13 ++++++++
api/v1/swagger/paths/patrons.yaml | 5 +++
.../prog/en/includes/js-patron-format.inc | 6 ++--
.../prog/en/includes/patron-search.inc | 4 +--
.../prog/en/includes/patron-title.inc | 13 ++++++--
.../prog/en/includes/patronfields.inc | 3 +-
.../en/modules/admin/preferences/patrons.pref | 2 +-
.../prog/en/modules/members/memberentrygen.tt | 17 +++++++++-
.../prog/en/modules/members/members-update.tt | 1 +
.../prog/en/modules/members/moremember.tt | 10 ++++--
.../intranet-tmpl/prog/js/staff-global.js | 2 +-
.../bootstrap/en/includes/patron-title.inc | 2 +-
.../bootstrap/en/modules/opac-memberentry.tt | 15 +++++++--
t/db_dependent/Koha/Patron.t | 33 ++++++++++++++++++-
15 files changed, 110 insertions(+), 17 deletions(-)
--- a/Koha/Database/Columns.pm
+++ a/Koha/Database/Columns.pm
@@ -174,6 +174,7 @@ sub columns {
"password" => __("Password"),
"phone" => __("Primary phone"),
"phonepro" => __("Secondary phone"),
+ "preferred_name" => __("Preferred_name"),
"primary_contact_method" => __("Primary contact method"),
"privacy_guarantor_checkouts" => __("Show checkouts to guarantor"),
"privacy_guarantor_fines" => __("Show fines to guarantor"),
--- a/Koha/Patron.pm
+++ a/Koha/Patron.pm
@@ -117,6 +117,19 @@ sub new {
return $class->SUPER::new($params);
}
+=head3 effective_name
+
+Return the preferred name for a patron, or their firstname if no
+preferred name is set
+
+=cut
+
+sub effective_name {
+ my ($self) = @_;
+
+ return $self->preferred_name || $self->firstname;
+}
+
=head3 fixup_cardnumber
Autogenerate next cardnumber from highest value found in database
--- a/api/v1/swagger/paths/patrons.yaml
+++ a/api/v1/swagger/paths/patrons.yaml
@@ -29,6 +29,11 @@
description: Case insensitive search on firstname
required: false
type: string
+ - name: preferred_name
+ in: query
+ description: Case insensitive search on preferred name
+ required: false
+ type: string
- name: title
in: query
description: Case insensitive search on title
--- a/koha-tmpl/intranet-tmpl/prog/en/includes/js-patron-format.inc
+++ a/koha-tmpl/intranet-tmpl/prog/en/includes/js-patron-format.inc
@@ -20,7 +20,9 @@
var name;
var firstname = escape_str(patron.firstname);
+ var preferred_name = escape_str(patron.preferred_name);
var surname = escape_str(patron.surname);
+ var effective_name = preferred_name || firstname;
if ( patron.middle_name != null && patron.middle_name != '' ) {
firstname += ' ' + escape_str(patron.middle_name);
@@ -30,10 +32,10 @@
firstname += ' (' + escape_str(patron.other_name) + ')';
}
if ( config && config.invert_name ) {
- name = surname + ( firstname ? ', ' + firstname : '' );
+ name = surname + ( effective_name ? ', ' + effective_name : '' );
}
else {
- name = firstname + ' ' + surname;
+ name = effective_name + ' ' + surname;
}
if ( name.replace(' ', '').length == 0 ) {
--- a/koha-tmpl/intranet-tmpl/prog/en/includes/patron-search.inc
+++ a/koha-tmpl/intranet-tmpl/prog/en/includes/patron-search.inc
@@ -493,7 +493,7 @@
}
[% CASE 'name-address' %]
{
- "data": "me.surname:me.firstname:me.middle_name:me.othernames:me.street_number:me.address:me.address2:me.city:me.state:me.postal_code:me.country",
+ "data": "me.surname:me.preferred_name:me.firstname:me.middle_name:me.othernames:me.street_number:me.address:me.address2:me.city:me.state:me.postal_code:me.country",
"searchable": true,
"orderable": true,
"render": function( data, type, row, meta ) {
@@ -518,7 +518,7 @@
}
[% CASE 'name' %]
{
- "data": "me.surname:me.firstname:me.middle_name:me.othernames",
+ "data": "me.surname:me.preferred_name:me.firstname:me.middle_name:me.othernames",
"searchable": true,
"orderable": true,
"render": function( data, type, row, meta ) {
--- a/koha-tmpl/intranet-tmpl/prog/en/includes/patron-title.inc
+++ a/koha-tmpl/intranet-tmpl/prog/en/includes/patron-title.inc
@@ -7,6 +7,8 @@
[%- SET data.surname = patron.surname -%]
[%- SET data.othernames = patron.othernames -%]
[%- SET data.firstname = patron.firstname -%]
+ [%- SET data.preferred_name = patron.preferred_name -%]
+ [%- SET data.effective_name = patron.effective_name -%]
[%- SET data.middle_name = patron.middle_name -%]
[%- SET data.cardnumber = patron.cardnumber -%]
[%- SET data.borrowernumber = patron.borrowernumber -%]
@@ -16,6 +18,8 @@
[%- SET data.surname = borrower.surname -%]
[%- SET data.othernames = borrower.othernames -%]
[%- SET data.firstname = borrower.firstname -%]
+ [%- SET data.preferred_name = borrower.preferred_name -%]
+ [%- SET data.effective_name = borrower.effective_name -%]
[%- SET data.middle_name = borrower.middle_name -%]
[%- SET data.cardnumber = borrower.cardnumber -%]
[%- SET data.borrowernumber = borrower.borrowernumber -%]
@@ -25,11 +29,16 @@
[%- SET data.surname = surname -%]
[%- SET data.othernames = othernames -%]
[%- SET data.firstname = firstname -%]
+ [%- SET data.preferred_name = preferred_name -%]
+ [%- SET data.effective_name = effective_name -%]
[%- SET data.middle_name = middle_name -%]
[%- SET data.cardnumber = cardnumber -%]
[%- SET data.borrowernumber = borrowernumber -%]
[%- SET data.title = title -%]
[%- END -%]
+[%- UNLESS data.effective_name -%]
+ [%- SET data.effective_name = data.preferred_name || data.firstname -%]
+[%- END -%]
[%# Parameter no_html - if 1, the html tags are NOT generated -%]
[%- IF no_title -%][%- SET data.title = "" -%][%- END -%]
[%- IF data.title -%]
@@ -66,9 +75,9 @@
[%- IF data.category_type == 'I' -%]
[%- data.surname | html -%] [%- IF data.othernames -%] ([%- data.othernames | html -%])[%- END -%]
[%- ELSIF invert_name -%]
- [%- data.title | $raw -%][%- data.surname | html -%][%- IF ( data.firstname ) -%], [% data.firstname | html -%][%- END -%][%- IF data.middle_name -%] [% data.middle_name | html -%][%- END -%][%- IF data.othernames -%] ([%- data.othernames | html -%])[%- END -%]
+ [%- data.title | $raw -%][%- data.surname | html -%][%- IF ( data.effective_name ) -%], [% data.effective_name | html -%][%- END -%][%- IF data.middle_name -%] [% data.middle_name | html -%][%- END -%][%- IF data.othernames -%] ([%- data.othernames | html -%])[%- END -%]
[%- ELSE -%]
- [%- data.title | $raw -%][%- data.firstname | html %][%- IF data.middle_name -%] [% data.middle_name | html -%][%- END -%][%- IF data.othernames -%] ([%- data.othernames | html -%]) [%- END -%] [% data.surname | html -%]
+ [%- data.title | $raw -%][%- data.effective_name | html %][%- IF data.middle_name -%] [% data.middle_name | html -%][%- END -%][%- IF data.othernames -%] ([%- data.othernames | html -%]) [%- END -%] [% data.surname | html -%]
[%- END -%]
[%- IF display_cardnumber AND data.cardnumber -%] ([%- data.cardnumber | html -%])[%- END -%]
[%- ELSIF display_cardnumber -%]
--- a/koha-tmpl/intranet-tmpl/prog/en/includes/patronfields.inc
+++ a/koha-tmpl/intranet-tmpl/prog/en/includes/patronfields.inc
@@ -8,6 +8,7 @@
[%- CASE 'cardnumber' -%][% t("Card number") | html %]
[%- CASE 'surname' -%][% t("Surname") | html %]
[%- CASE 'firstname' -%][% t("First name") | html %]
+ [%- CASE 'preferred_name' -%][% t("Preferred name") | html %]
[%- CASE 'middle_name' -%][% t("Middle name") | html %]
[%- CASE 'title' -%][% t("Salutation") | html %]
[%- CASE 'othernames' -%][% t("Other name") | html %]
@@ -86,7 +87,7 @@