From ba508132f5178237a62bba92487ccbc7c2bb3a61 Mon Sep 17 00:00:00 2001
From: charles <charles.farmer@inlibro.com>
Date: Wed, 4 Jan 2017 09:37:54 -0500
Subject: [PATCH] Bug 11879: Add the "Main contact method" field in borrower
informations.
This patch adds the "Main Contact Method" field in the borrower modification form.
This field is useful for reporting purposes, or to know which contact method to use first when trying to contact a borrower.
Following Nicolas' fix, removed a $branch variable from patch, since it has been suppressed in Bug 17284.
Test case :
* Edit a borrower's informations. The "Main Contact Method" selectbox should appear in the form and its value should be saved correctly.
Sponsored-by: CCSR <http://www.ccsr.qc.ca>
Signed-off-by: Lucie Gay <lucie.gay@ens-paris-saclay.fr>
Signed-off-by: Katrin Fischer <katrin.fischer.83@web.de>
Signed-off-by: Hayley Mapley <hayleymapley@catalyst.net.nz>
Signed-off-by: Bin Wen <bin.wen@inlibro.com>
---
.../borrowers_primary_contact_method.sql | 3 +
installer/data/mysql/kohastructure.sql | 3 +
.../prog/en/modules/members/memberentrygen.tt | 63 ++++++++++++++++++-
.../prog/en/modules/members/moremember.tt | 15 +++++
.../bootstrap/en/modules/opac-memberentry.tt | 50 +++++++++++++++
members/memberentry.pl | 13 +++-
members/moremember.pl | 4 ++
opac/opac-memberentry.pl | 13 ++++
8 files changed, 162 insertions(+), 2 deletions(-)
create mode 100644 installer/data/mysql/atomicupdate/borrowers_primary_contact_method.sql
diff --git a/installer/data/mysql/atomicupdate/borrowers_primary_contact_method.sql b/installer/data/mysql/atomicupdate/borrowers_primary_contact_method.sql
new file mode 100644
index 0000000000..000791d8cb
--- /dev/null
+++ b/installer/data/mysql/atomicupdate/borrowers_primary_contact_method.sql
@@ -0,0 +1,3 @@
+ALTER TABLE `borrowers` ADD COLUMN `primary_contact_method` VARCHAR(45) NULL DEFAULT NULL AFTER `lastseen`;
+ALTER TABLE `deletedborrowers` ADD COLUMN `primary_contact_method` VARCHAR(45) NULL DEFAULT NULL AFTER `overdrive_auth_token`;
+ALTER TABLE `borrower_modifications` ADD COLUMN `primary_contact_method` VARCHAR(45) NULL DEFAULT NULL AFTER `extended_attributes`;
diff --git a/installer/data/mysql/kohastructure.sql b/installer/data/mysql/kohastructure.sql
index 7073c9a2d1..11aaf8da40 100644
--- a/installer/data/mysql/kohastructure.sql
+++ b/installer/data/mysql/kohastructure.sql
@@ -590,6 +590,7 @@ CREATE TABLE `deletedborrowers` ( -- stores data related to the patrons/borrower
`login_attempts` int(4) default 0, -- number of failed login attemps
`overdrive_auth_token` MEDIUMTEXT default NULL, -- persist OverDrive auth token
`anonymized` TINYINT(1) NOT NULL DEFAULT 0, -- flag for data anonymization
+ `primary_contact_method` varchar(45) DEFAULT NULL, -- useful for reporting purposes
KEY borrowernumber (borrowernumber),
KEY `cardnumber` (`cardnumber`),
KEY `sms_provider_id` (`sms_provider_id`)
@@ -1582,6 +1583,7 @@ CREATE TABLE `borrowers` ( -- this table includes information about your patrons
`login_attempts` int(4) default 0, -- number of failed login attemps
`overdrive_auth_token` MEDIUMTEXT default NULL, -- persist OverDrive auth token
`anonymized` TINYINT(1) NOT NULL DEFAULT 0, -- flag for data anonymization
+ `primary_contact_method` varchar(45) DEFAULT NULL, -- useful for reporting purposes
UNIQUE KEY `cardnumber` (`cardnumber`),
PRIMARY KEY `borrowernumber` (`borrowernumber`),
KEY `categorycode` (`categorycode`),
@@ -3409,6 +3411,7 @@ CREATE TABLE IF NOT EXISTS `borrower_modifications` (
`privacy` int(11) DEFAULT NULL,
`extended_attributes` MEDIUMTEXT DEFAULT NULL,
`gdpr_proc_consent` datetime, -- data processing consent
+ `primary_contact_method` varchar(45) DEFAULT NULL, -- useful for reporting purposes
PRIMARY KEY (`verification_token` (191),`borrowernumber`),
KEY `verification_token` (`verification_token` (191)),
KEY `borrowernumber` (`borrowernumber`)
diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/members/memberentrygen.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/members/memberentrygen.tt
index 19c4b5f3c6..e0965fba4c 100644
--- a/koha-tmpl/intranet-tmpl/prog/en/modules/members/memberentrygen.tt
+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/members/memberentrygen.tt
@@ -458,6 +458,16 @@
[% UNLESS nophone && nophonepro && nomobile && noemail && noemailpro && nofax %]
<fieldset class="rows" id="memberentry_contact">
<legend id="contact_lgd">Contact</legend><ol>
+ [% UNLESS nophone %]
+ <li>
+ [% IF ( mandatoryphone ) %]
+ <label for="phone" class="required">
+ [% ELSE %]
+ <label for="phone">
+ [% END %]
+ Primary phone: </label>
+ <input type="text" id="phone" name="phone" value="[% phone | html %]" />
+ [% IF ( mandatoryphone ) %]<span class="required">Required</span>[% END %]<div class="hint">Shows on transit slips</div>
[% UNLESS nocontactname %]
<li>
@@ -580,8 +590,59 @@
[% IF ( mandatoryfax ) %]<span class="required">Required</span>[% END %]
</li>
[% END %]
+ <li>
+ <label for="primary_contact_method">Main contact method:</label>
+ <select id="primary_contact_method" name="primary_contact_method">
+ <option value=""></option>
+ [% FOREACH contactprincipalloo IN contactprincipalloop %]
+ [% IF ( contactprincipalloo.currentis_phone ) %]
+ [% IF ( primary_contact_method == 'phone' ) %]
+ <option value="phone" selected="selected">Primary phone</option>
+ [% ELSE %]
+ <option value="phone">Primary phone</option>
+ [% END %]
+ [% END %]
+ [% IF ( contactprincipalloo.currentis_phonepro ) %]
+ [% IF ( primary_contact_method == 'phonepro' ) %]
+ <option value="phonepro" selected="selected">Secondary phone</option>
+ [% ELSE %]
+ <option value="phonepro">Secondary phone</option>
+ [% END %]
+ [% END %]
+ [% IF ( contactprincipalloo.currentis_mobile ) %]
+ [% IF ( primary_contact_method == 'mobile' ) %]
+ <option value="mobile" selected="selected">Other phone</option>
+ [% ELSE %]
+ <option value="mobile">Other phone</option>
+ [% END %]
+ [% END %]
+ [% IF ( contactprincipalloo.currentis_email ) %]
+ [% IF ( primary_contact_method == 'email' ) %]
+ <option value="email" selected="selected">Primary email</option>
+ [% ELSE %]
+ <option value="email">Primary email</option>
+ [% END %]
+ [% END %]
+ [% IF ( contactprincipalloo.currentis_emailpro ) %]
+ [% IF ( primary_contact_method == 'emailpro' ) %]
+ <option value="emailpro" selected="selected">Secondary email</option>
+ [% ELSE %]
+ <option value="emailpro">Secondary email</option>
+ [% END %]
+ [% END %]
+ [% IF ( contactprincipalloo.currentis_fax ) %]
+ [% IF ( primary_contact_method == 'fax' ) %]
+ <option value="fax" selected="selected">Fax</option>
+ [% ELSE %]
+ <option value="fax">Fax</option>
+ [% END %]
+ [% END %]
+ [% END %]
+ </select>
+ </li>
</ol>
-</fieldset>
+
+ </fieldset>
[%END # hide fieldset %]
<!-- ************************ STEP_1 *********************** -->
diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/members/moremember.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/members/moremember.tt
index 1cbc7afc6d..24e026b7a6 100644
--- a/koha-tmpl/intranet-tmpl/prog/en/modules/members/moremember.tt
+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/members/moremember.tt
@@ -287,6 +287,21 @@
</ul>
</li>
[% END %]
+
+ [% SWITCH primary_contact_method %]
+ [% CASE 'phone' %]
+ <li><span class="label">Main contact method: </span>Phone</li>
+ [% CASE 'phonepro' %]
+ <li><span class="label">Main contact method: </span>Secondary phone</li>
+ [% CASE 'mobile' %]
+ <li><span class="label">Main contact method: </span>Other Phone</li>
+ [% CASE 'email' %]
+ <li><span class="label">Main contact method: </span>Primary email</li>
+ [% CASE 'emailpro' %]
+ <li><span class="label">Main contact method: </span>Secondary email</li>
+ [% CASE 'fax' %]
+ <li><span class="label">Main contact method: </span>Fax</li>
+ [% END %]
</ol>
</div> [% # /div.rows %]
</div> [% # /div#patron-information %]
diff --git a/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-memberentry.tt b/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-memberentry.tt
index 8761cc88ae..352fd61c5f 100644
--- a/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-memberentry.tt
+++ b/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-memberentry.tt
@@ -581,6 +581,56 @@
[% IF mandatory.defined('fax') %]<span class="required">Required</span>[% END %]
</li>
[% END %]
+ <li>
+ <label for="borrower_primary_contact_method">Main contact method:</label>
+ <select id="borrower_primary_contact_method" name="borrower_primary_contact_method">
+ <option value=""></option>
+ [% FOREACH contactprincipalloo IN contactprincipalloop %]
+ [% IF ( contactprincipalloo.currentis_phone ) %]
+ [% IF ( borrower.primary_contact_method == 'phone' ) %]
+ <option value="phone" selected="selected">Primary phone</option>
+ [% ELSE %]
+ <option value="phone">Primary phone</option>
+ [% END %]
+ [% END %]
+ [% IF ( contactprincipalloo.currentis_phonepro ) %]
+ [% IF ( borrower.primary_contact_method == 'phonepro' ) %]
+ <option value="phonepro" selected="selected">Secondary phone</option>
+ [% ELSE %]
+ <option value="phonepro">Secondary phone</option>
+ [% END %]
+ [% END %]
+ [% IF ( contactprincipalloo.currentis_mobile ) %]
+ [% IF ( borrower.primary_contact_method == 'mobile' ) %]
+ <option value="mobile" selected="selected">Other phone</option>
+ [% ELSE %]
+ <option value="mobile">Other phone</option>
+ [% END %]
+ [% END %]
+ [% IF ( contactprincipalloo.currentis_email ) %]
+ [% IF ( borrower.primary_contact_method == 'email' ) %]
+ <option value="email" selected="selected">Primary email</option>
+ [% ELSE %]
+ <option value="email">Primary email</option>
+ [% END %]
+ [% END %]
+ [% IF ( contactprincipalloo.currentis_emailpro ) %]
+ [% IF ( borrower.primary_contact_method == 'emailpro' ) %]
+ <option value="emailpro" selected="selected">Secondary email</option>
+ [% ELSE %]
+ <option value="emailpro">Secondary email</option>
+ [% END %]
+ [% END %]
+ [% IF ( contactprincipalloo.currentis_fax ) %]
+ [% IF ( borrower.primary_contact_method == 'fax' ) %]
+ <option value="fax" selected="selected">Fax</option>
+ [% ELSE %]
+ <option value="fax">Fax</option>
+ [% END %]
+ [% END %]
+ [% END %]
+ </select>
+ </li>
</ol>
</fieldset>
[% END %]
diff --git a/members/memberentry.pl b/members/memberentry.pl
index fa5cbe427e..ca80356342 100755
--- a/members/memberentry.pl
+++ b/members/memberentry.pl
@@ -638,6 +638,18 @@ $template->param(
typeloop => \@typeloop,
no_categories => $no_categories,
);
+if($no_categories){ $no_add = 1; }
+
+my @contactprincipalloop;
+my @fieldArray = qw(phone phonepro mobile email emailpro fax);
+foreach my $field (@fieldArray) {
+ if ( !(grep { $field eq $_ } @field_check)){
+ push @contactprincipalloop,{
+ 'currentis_' . $field => 1
+ };
+ }
+}
+$template->param('contactprincipalloop' => \@contactprincipalloop);
my $cities = Koha::Cities->search( {}, { order_by => 'city_name' } );
my $roadtypes = C4::Koha::GetAuthorisedValues( 'ROADTYPE' );
@@ -645,7 +657,6 @@ $template->param(
roadtypes => $roadtypes,
cities => $cities,
);
-
my $default_borrowertitle = '';
unless ( $op eq 'duplicate' ) { $default_borrowertitle=$data{'title'} }
diff --git a/members/moremember.pl b/members/moremember.pl
index 593b0d1156..afaf6175a1 100755
--- a/members/moremember.pl
+++ b/members/moremember.pl
@@ -204,6 +204,10 @@ $template->param(
fines => $patron->account->balance,
translated_language => $translated_language,
detailview => 1,
+ borrowernumber => $borrowernumber,
+ othernames => $data->{'othernames'},
+ categoryname => $patron->category->description,
+ primary_contact_method => $data->{'primary_contact_method'},
was_renewed => scalar $input->param('was_renewed') ? 1 : 0,
$category_type => 1, # [% IF ( I ) %] = institutional/organisation
housebound_role => scalar $patron->housebound_role,
diff --git a/opac/opac-memberentry.pl b/opac/opac-memberentry.pl
index 62cdd0d205..0e8efab9d5 100755
--- a/opac/opac-memberentry.pl
+++ b/opac/opac-memberentry.pl
@@ -94,6 +94,19 @@ $template->param(
libraries => \@libraries,
OPACPatronDetails => C4::Context->preference('OPACPatronDetails'),
);
+my $check_BorrowerMandatoryField=C4::Context->preference("BorrowerMandatoryField");
+ my @field_check=split(/\|/,$check_BorrowerMandatoryField);
+ my @contactprincipalloop;
+ my @fieldArray = qw(phone phonepro mobile email emailpro fax);
+ foreach my $field (@fieldArray) {
+ if ( !(grep { $field eq $_ } @field_check)){
+ push @contactprincipalloop,{
+ 'currentis_' . $field => 1
+ };
+ }
+ }
+
+ $template->param('contactprincipalloop' => \@contactprincipalloop);
my $attributes = ParsePatronAttributes($borrowernumber,$cgi);
my $conflicting_attribute = 0;
--
2.17.1