From a561e0e3008f51222da5f0d5f36a3f97cd0d6dfd Mon Sep 17 00:00:00 2001 From: Bin Wen Date: Wed, 18 Dec 2019 11:52:49 -0500 Subject: [PATCH] Bug 11879 - Add a new field to patron record: main contact method Fixed the problem mentioned above. Test plan is same as before: 0) Apply patch 1) updatedatabase.pl 2) In the staff client, edit a patron's contact info. There should be a new dropdown select to choose the main contact method 3) In the opac page, edit the personal details.There should be a new dropdown select to choose the main contact method. 4) Save the form. It should work. --- Koha/Schema/Result/Borrower.pm | 8 +++ Koha/Schema/Result/BorrowerModification.pm | 8 +++ Koha/Schema/Result/Deletedborrower.pm | 8 +++ .../borrowers_primary_contact_method.perl | 17 ++++++ installer/data/mysql/kohastructure.sql | 3 + .../prog/en/modules/members/memberentrygen.tt | 58 ++++++++++++++++++ .../prog/en/modules/members/moremember.tt | 20 +++++++ .../bootstrap/en/modules/opac-memberentry.tt | 59 +++++++++++++++++++ opac/opac-memberentry.pl | 14 +++++ 9 files changed, 195 insertions(+) create mode 100644 installer/data/mysql/atomicupdate/borrowers_primary_contact_method.perl diff --git a/Koha/Schema/Result/Borrower.pm b/Koha/Schema/Result/Borrower.pm index dd305eca39..0e9ea3f369 100644 --- a/Koha/Schema/Result/Borrower.pm +++ b/Koha/Schema/Result/Borrower.pm @@ -414,6 +414,12 @@ __PACKAGE__->table("borrowers"); default_value: 0 is_nullable: 0 +=head2 primary_contact_method + + data_type: 'varchar' + is_nullable: 1 + size: 45 + =head2 checkprevcheckout data_type: 'varchar' @@ -629,6 +635,8 @@ __PACKAGE__->add_columns( { data_type => "tinyint", default_value => 0, is_nullable => 0 }, "privacy_guarantor_checkouts", { data_type => "tinyint", default_value => 0, is_nullable => 0 }, + "primary_contact_method", + { data_type => "varchar", is_nullable => 1, size => 45 }, "checkprevcheckout", { data_type => "varchar", diff --git a/Koha/Schema/Result/BorrowerModification.pm b/Koha/Schema/Result/BorrowerModification.pm index 3db708d3fc..ede6a63d1a 100644 --- a/Koha/Schema/Result/BorrowerModification.pm +++ b/Koha/Schema/Result/BorrowerModification.pm @@ -410,6 +410,12 @@ __PACKAGE__->table("borrower_modifications"); data_type: 'integer' is_nullable: 1 +=head2 primary_contact_method + + data_type: 'varchar' + is_nullable: 1 + size: 45 + =head2 extended_attributes data_type: 'mediumtext' @@ -585,6 +591,8 @@ __PACKAGE__->add_columns( { data_type => "varchar", is_nullable => 1, size => 50 }, "privacy", { data_type => "integer", is_nullable => 1 }, + "primary_contact_method", + { data_type => "varchar", is_nullable => 1, size => 45 }, "extended_attributes", { data_type => "mediumtext", is_nullable => 1 }, "gdpr_proc_consent", diff --git a/Koha/Schema/Result/Deletedborrower.pm b/Koha/Schema/Result/Deletedborrower.pm index 1ba0873e2f..dba3a22203 100644 --- a/Koha/Schema/Result/Deletedborrower.pm +++ b/Koha/Schema/Result/Deletedborrower.pm @@ -411,6 +411,12 @@ __PACKAGE__->table("deletedborrowers"); default_value: 0 is_nullable: 0 +=head2 primary_contact_method + + data_type: 'varchar' + is_nullable: 1 + size: 45 + =head2 checkprevcheckout data_type: 'varchar' @@ -614,6 +620,8 @@ __PACKAGE__->add_columns( { data_type => "tinyint", default_value => 0, is_nullable => 0 }, "privacy_guarantor_checkouts", { data_type => "tinyint", default_value => 0, is_nullable => 0 }, + "primary_contact_method", + { data_type => "varchar", is_nullable => 1, size => 45 }, "checkprevcheckout", { data_type => "varchar", diff --git a/installer/data/mysql/atomicupdate/borrowers_primary_contact_method.perl b/installer/data/mysql/atomicupdate/borrowers_primary_contact_method.perl new file mode 100644 index 0000000000..e34fc015a2 --- /dev/null +++ b/installer/data/mysql/atomicupdate/borrowers_primary_contact_method.perl @@ -0,0 +1,17 @@ +$DBversion = 'XXX'; # will be replaced by the RM +if( CheckVersion( $DBversion ) ) { + if( !column_exists( 'borrowers', 'primary_contact_method' ) ) { + $dbh->do( "ALTER TABLE `borrowers` ADD COLUMN `primary_contact_method` VARCHAR(45) NULL DEFAULT NULL AFTER `anonymized`" ); + } + + if( !column_exists( 'deletedborrowers', 'primary_contact_method' ) ) { + $dbh->do( "ALTER TABLE `deletedborrowers` ADD COLUMN `primary_contact_method` VARCHAR(45) NULL DEFAULT NULL AFTER `anonymized`" ); + } + + if( !column_exists( 'borrower_modifications', 'primary_contact_method' ) ) { + $dbh->do( "ALTER TABLE `borrower_modifications` ADD COLUMN `primary_contact_method` VARCHAR(45) NULL DEFAULT NULL AFTER `gdpr_proc_consent`" ); + } + + SetVersion( $DBversion ); + print "Upgrade to $DBversion done (Bug 11879 - Add a new field to patron record: main contact method)\n"; +} diff --git a/installer/data/mysql/kohastructure.sql b/installer/data/mysql/kohastructure.sql index 0f092725b5..5b1623a355 100644 --- a/installer/data/mysql/kohastructure.sql +++ b/installer/data/mysql/kohastructure.sql @@ -589,6 +589,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`) @@ -1530,6 +1531,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`), @@ -3435,6 +3437,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 d4db2e37b3..673142d0d8 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/members/memberentrygen.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/members/memberentrygen.tt @@ -657,6 +657,64 @@ [% END %] [% END #/UNLESS nofax %] + +
  • + [% IF mandatoryprimary_contact_method %] +
  • [% END # hide fieldset %] 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 ab3e89abf7..b37d0522f7 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/members/moremember.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/members/moremember.tt @@ -283,6 +283,26 @@ [% END %] + + [% IF ( primary_contact_method ) %] +
  • + Main contact method: + [% SWITCH primary_contact_method %] + [% CASE 'phone' %] + Primary phone + [% CASE 'phonepro' %] + Secondary phone + [% CASE 'mobile' %] + Other phone + [% CASE 'email' %] + Primary email + [% CASE 'emailpro' %] + Secondary email + [% CASE 'fax' %] + Fax + [% END %] +
  • + [% END %] [% # /div.rows %] [% # /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..cbde19e497 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,65 @@ [% IF mandatory.defined('fax') %]Required[% END %] [% END %] + + [% UNLESS hidden.defined('primary_contact_method') %] +
  • + [% IF ( mandatory.defined('primary_contact_method') ) %] + + [% ELSE %] + + [% END %] + + + [% IF ( mandatory.defined('primary_contact_method') ) %]Required[% END %] +
  • + [% END %] [% END %] diff --git a/opac/opac-memberentry.pl b/opac/opac-memberentry.pl index 391a78f8e0..ddb7128641 100755 --- a/opac/opac-memberentry.pl +++ b/opac/opac-memberentry.pl @@ -95,6 +95,20 @@ $template->param( 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