diff --git a/Koha/Database/Columns.pm b/Koha/Database/Columns.pm
index d6cd1d407f..985460895b 100644
--- a/Koha/Database/Columns.pm
+++ b/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"),
diff --git a/Koha/Patron.pm b/Koha/Patron.pm
index 26ba7a24df..33e3988f59 100644
--- a/Koha/Patron.pm
+++ b/Koha/Patron.pm
@@ -228,6 +228,11 @@ sub store {
$self->surname( uc( $self->surname ) )
if C4::Context->preference("uppercasesurnames");
+ # Add preferred name unless specified
+ unless ( $self->preferred_name ) {
+ $self->preferred_name( $self->firstname );
+ }
+
$self->relationship(undef) # We do not want to store an empty string in this field
if defined $self->relationship
and $self->relationship eq "";
diff --git a/Koha/Patron/Modification.pm b/Koha/Patron/Modification.pm
index 1b42223f04..d26aa0b3b2 100644
--- a/Koha/Patron/Modification.pm
+++ b/Koha/Patron/Modification.pm
@@ -103,6 +103,9 @@ sub approve {
delete $data->{$key};
}
+ my $unwanted = C4::Context->preference('PatronSelfModificationBorrowerUnwantedField');
+ $data->{preferred_name} = $data->{firstname} if ( $unwanted =~ 'preferred_name' && defined $data->{firstname} );
+
$patron->set($data);
# Take care of extended attributes
diff --git a/api/v1/swagger/paths/patrons.yaml b/api/v1/swagger/paths/patrons.yaml
index cf05d748d8..3cdc322445 100644
--- a/api/v1/swagger/paths/patrons.yaml
+++ b/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
diff --git a/koha-tmpl/intranet-tmpl/prog/en/includes/js-patron-format.inc b/koha-tmpl/intranet-tmpl/prog/en/includes/js-patron-format.inc
index 69b472d97b..fd8463ba3a 100644
--- a/koha-tmpl/intranet-tmpl/prog/en/includes/js-patron-format.inc
+++ b/koha-tmpl/intranet-tmpl/prog/en/includes/js-patron-format.inc
@@ -20,6 +20,7 @@
var name;
var firstname = escape_str(patron.firstname);
+ var preferred_name = escape_str(patron.preferred_name);
var surname = escape_str(patron.surname);
if ( patron.middle_name != null && patron.middle_name != '' ) {
@@ -30,10 +31,10 @@
firstname += ' (' + escape_str(patron.other_name) + ')';
}
if ( config && config.invert_name ) {
- name = surname + ( firstname ? ', ' + firstname : '' );
+ name = surname + ( preferred_name ? ', ' + preferred_name : '' );
}
else {
- name = firstname + ' ' + surname;
+ name = preferred_name + ' ' + surname;
}
if ( name.replace(' ', '').length == 0 ) {
diff --git a/koha-tmpl/intranet-tmpl/prog/en/includes/patron-search.inc b/koha-tmpl/intranet-tmpl/prog/en/includes/patron-search.inc
index 5a0fa0d13d..87afa1e7c9 100644
--- a/koha-tmpl/intranet-tmpl/prog/en/includes/patron-search.inc
+++ b/koha-tmpl/intranet-tmpl/prog/en/includes/patron-search.inc
@@ -535,7 +535,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 ) {
@@ -560,7 +560,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 ) {
diff --git a/koha-tmpl/intranet-tmpl/prog/en/includes/patron-title.inc b/koha-tmpl/intranet-tmpl/prog/en/includes/patron-title.inc
index a633697a59..72d4472a83 100644
--- a/koha-tmpl/intranet-tmpl/prog/en/includes/patron-title.inc
+++ b/koha-tmpl/intranet-tmpl/prog/en/includes/patron-title.inc
@@ -7,6 +7,7 @@
[%- SET data.surname = patron.surname -%]
[%- SET data.othernames = patron.othernames -%]
[%- SET data.firstname = patron.firstname -%]
+ [%- SET data.preferred_name = patron.preferred_name -%]
[%- SET data.middle_name = patron.middle_name -%]
[%- SET data.cardnumber = patron.cardnumber -%]
[%- SET data.borrowernumber = patron.borrowernumber -%]
@@ -16,6 +17,7 @@
[%- SET data.surname = borrower.surname -%]
[%- SET data.othernames = borrower.othernames -%]
[%- SET data.firstname = borrower.firstname -%]
+ [%- SET data.preferred_name = borrower.preferred_name -%]
[%- SET data.middle_name = borrower.middle_name -%]
[%- SET data.cardnumber = borrower.cardnumber -%]
[%- SET data.borrowernumber = borrower.borrowernumber -%]
@@ -25,6 +27,7 @@
[%- SET data.surname = surname -%]
[%- SET data.othernames = othernames -%]
[%- SET data.firstname = firstname -%]
+ [%- SET data.preferred_name = preferred_name -%]
[%- SET data.middle_name = middle_name -%]
[%- SET data.cardnumber = cardnumber -%]
[%- SET data.borrowernumber = borrowernumber -%]
@@ -66,9 +69,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.preferred_name ) -%], [% data.preferred_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.preferred_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 -%]
diff --git a/koha-tmpl/intranet-tmpl/prog/en/includes/patronfields.inc b/koha-tmpl/intranet-tmpl/prog/en/includes/patronfields.inc
index 9e0477f4a9..d230bbf4c0 100644
--- a/koha-tmpl/intranet-tmpl/prog/en/includes/patronfields.inc
+++ b/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 @@