From 38d5b5f6e655749451aabaad895f2e67a9d91aef Mon Sep 17 00:00:00 2001 From: charles Date: Tue, 3 Jan 2017 15:02:33 -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. 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 --- Koha/Schema/Result/Borrower.pm | 4 +- Koha/Schema/Result/BorrowerModification.pm | 9 +++ Koha/Schema/Result/Deletedborrower.pm | 4 +- .../borrowers_primary_contact_method.sql | 3 + installer/data/mysql/kohastructure.sql | 91 ++++++++++++++++++++++ installer/data/mysql/updatedatabase.pl | 1 + .../prog/en/modules/members/memberentrygen.tt | 61 ++++++++++++++- .../prog/en/modules/members/moremember.tt | 14 ++++ .../bootstrap/en/modules/opac-memberentry.tt | 50 ++++++++++++ members/memberentry.pl | 11 ++- members/moremember.pl | 3 +- opac/opac-memberentry.pl | 13 ++++ 12 files changed, 256 insertions(+), 8 deletions(-) create mode 100644 installer/data/mysql/atomicupdate/borrowers_primary_contact_method.sql diff --git a/Koha/Schema/Result/Borrower.pm b/Koha/Schema/Result/Borrower.pm index 1fe3988..73bf8fe 100644 --- a/Koha/Schema/Result/Borrower.pm +++ b/Koha/Schema/Result/Borrower.pm @@ -401,7 +401,7 @@ __PACKAGE__->table("borrowers"); default_value: 1 is_nullable: 0 -=head2 privacy_guarantor_checkouts +=head2 primary_contact_method data_type: 'tinyint' default_value: 0 @@ -616,6 +616,8 @@ __PACKAGE__->add_columns( datetime_undef_if_invalid => 1, is_nullable => 1, }, + "primary_contact_method", + { data_type => "varchar", is_nullable => 1, size => 45 }, ); =head1 PRIMARY KEY diff --git a/Koha/Schema/Result/BorrowerModification.pm b/Koha/Schema/Result/BorrowerModification.pm index af4895a..5ac270f 100644 --- a/Koha/Schema/Result/BorrowerModification.pm +++ b/Koha/Schema/Result/BorrowerModification.pm @@ -404,6 +404,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: 'text' @@ -571,6 +577,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 => "text", is_nullable => 1 }, ); @@ -594,5 +602,6 @@ __PACKAGE__->set_primary_key("verification_token", "borrowernumber"); # DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:IZNhBX5Bj+x4S8JCWG+7lA + # You can replace this text with custom content, and it will be preserved on regeneration 1; diff --git a/Koha/Schema/Result/Deletedborrower.pm b/Koha/Schema/Result/Deletedborrower.pm index 937a4a4..e162f1c 100644 --- a/Koha/Schema/Result/Deletedborrower.pm +++ b/Koha/Schema/Result/Deletedborrower.pm @@ -398,7 +398,7 @@ __PACKAGE__->table("deletedborrowers"); default_value: 1 is_nullable: 0 -=head2 privacy_guarantor_checkouts +=head2 primary_contact_method data_type: 'tinyint' default_value: 0 @@ -601,6 +601,8 @@ __PACKAGE__->add_columns( datetime_undef_if_invalid => 1, is_nullable => 1, }, + "primary_contact_method", + { data_type => "varchar", is_nullable => 1, size => 45 }, ); 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 0000000..5364feb --- /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 `privacy_guarantor_checkouts`; +ALTER TABLE `deletedborrowers` ADD COLUMN `primary_contact_method` VARCHAR(45) NULL DEFAULT NULL AFTER `privacy_guarantor_checkouts`; +ALTER TABLE `borrower_modifications` ADD COLUMN `primary_contact_method` VARCHAR(45) NULL DEFAULT NULL AFTER `privacy`; diff --git a/installer/data/mysql/kohastructure.sql b/installer/data/mysql/kohastructure.sql index f40692e..eebc49d 100644 --- a/installer/data/mysql/kohastructure.sql +++ b/installer/data/mysql/kohastructure.sql @@ -205,6 +205,95 @@ CREATE TABLE `biblioitems` ( -- information related to bibliographic records in ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; -- +-- Table structure for table `borrowers` +-- + +DROP TABLE IF EXISTS `borrowers`; +CREATE TABLE `borrowers` ( -- this table includes information about your patrons/borrowers/members + `borrowernumber` int(11) NOT NULL auto_increment, -- primary key, Koha assigned ID number for patrons/borrowers + `cardnumber` varchar(16) default NULL, -- unique key, library assigned ID number for patrons/borrowers + `surname` mediumtext NOT NULL, -- patron/borrower's last name (surname) + `firstname` text, -- patron/borrower's first name + `title` mediumtext, -- patron/borrower's title, for example: Mr. or Mrs. + `othernames` mediumtext, -- any other names associated with the patron/borrower + `initials` text, -- initials for your patron/borrower + `streetnumber` varchar(10) default NULL, -- the house number for your patron/borrower's primary address + `streettype` varchar(50) default NULL, -- the street type (Rd., Blvd, etc) for your patron/borrower's primary address + `address` mediumtext NOT NULL, -- the first address line for your patron/borrower's primary address + `address2` text, -- the second address line for your patron/borrower's primary address + `city` mediumtext NOT NULL, -- the city or town for your patron/borrower's primary address + `state` text default NULL, -- the state or province for your patron/borrower's primary address + `zipcode` varchar(25) default NULL, -- the zip or postal code for your patron/borrower's primary address + `country` text, -- the country for your patron/borrower's primary address + `email` mediumtext, -- the primary email address for your patron/borrower's primary address + `phone` text, -- the primary phone number for your patron/borrower's primary address + `mobile` varchar(50) default NULL, -- the other phone number for your patron/borrower's primary address + `fax` mediumtext, -- the fax number for your patron/borrower's primary address + `emailpro` text, -- the secondary email addres for your patron/borrower's primary address + `phonepro` text, -- the secondary phone number for your patron/borrower's primary address + `B_streetnumber` varchar(10) default NULL, -- the house number for your patron/borrower's alternate address + `B_streettype` varchar(50) default NULL, -- the street type (Rd., Blvd, etc) for your patron/borrower's alternate address + `B_address` varchar(100) default NULL, -- the first address line for your patron/borrower's alternate address + `B_address2` text default NULL, -- the second address line for your patron/borrower's alternate address + `B_city` mediumtext, -- the city or town for your patron/borrower's alternate address + `B_state` text default NULL, -- the state for your patron/borrower's alternate address + `B_zipcode` varchar(25) default NULL, -- the zip or postal code for your patron/borrower's alternate address + `B_country` text, -- the country for your patron/borrower's alternate address + `B_email` text, -- the patron/borrower's alternate email address + `B_phone` mediumtext, -- the patron/borrower's alternate phone number + `dateofbirth` date default NULL, -- the patron/borrower's date of birth (YYYY-MM-DD) + `branchcode` varchar(10) NOT NULL default '', -- foreign key from the branches table, includes the code of the patron/borrower's home branch + `categorycode` varchar(10) NOT NULL default '', -- foreign key from the categories table, includes the code of the patron category + `dateenrolled` date default NULL, -- date the patron was added to Koha (YYYY-MM-DD) + `dateexpiry` date default NULL, -- date the patron/borrower's card is set to expire (YYYY-MM-DD) + `gonenoaddress` tinyint(1) default NULL, -- set to 1 for yes and 0 for no, flag to note that library marked this patron/borrower as having an unconfirmed address + `lost` tinyint(1) default NULL, -- set to 1 for yes and 0 for no, flag to note that library marked this patron/borrower as having lost their card + `debarred` date default NULL, -- until this date the patron can only check-in (no loans, no holds, etc.), is a fine based on days instead of money (YYY-MM-DD) + `debarredcomment` VARCHAR(255) DEFAULT NULL, -- comment on the stop of the patron + `contactname` mediumtext, -- used for children and profesionals to include surname or last name of guarentor or organization name + `contactfirstname` text, -- used for children to include first name of guarentor + `contacttitle` text, -- used for children to include title (Mr., Mrs., etc) of guarentor + `guarantorid` int(11) default NULL, -- borrowernumber used for children or professionals to link them to guarentors or organizations + `borrowernotes` mediumtext, -- a note on the patron/borrower's account that is only visible in the staff client + `relationship` varchar(100) default NULL, -- used for children to include the relationship to their guarentor + `sex` varchar(1) default NULL, -- patron/borrower's gender + `password` varchar(60) default NULL, -- patron/borrower's encrypted password + `flags` int(11) default NULL, -- will include a number associated with the staff member's permissions + `userid` varchar(75) default NULL, -- patron/borrower's opac and/or staff client log in + `opacnote` mediumtext, -- a note on the patron/borrower's account that is visible in the OPAC and staff client + `contactnote` varchar(255) default NULL, -- a note related to the patron/borrower's alternate address + `sort1` varchar(80) default NULL, -- a field that can be used for any information unique to the library + `sort2` varchar(80) default NULL, -- a field that can be used for any information unique to the library + `altcontactfirstname` varchar(255) default NULL, -- first name of alternate contact for the patron/borrower + `altcontactsurname` varchar(255) default NULL, -- surname or last name of the alternate contact for the patron/borrower + `altcontactaddress1` varchar(255) default NULL, -- the first address line for the alternate contact for the patron/borrower + `altcontactaddress2` varchar(255) default NULL, -- the second address line for the alternate contact for the patron/borrower + `altcontactaddress3` varchar(255) default NULL, -- the city for the alternate contact for the patron/borrower + `altcontactstate` text default NULL, -- the state for the alternate contact for the patron/borrower + `altcontactzipcode` varchar(50) default NULL, -- the zipcode for the alternate contact for the patron/borrower + `altcontactcountry` text default NULL, -- the country for the alternate contact for the patron/borrower + `altcontactphone` varchar(50) default NULL, -- the phone number for the alternate contact for the patron/borrower + `smsalertnumber` varchar(50) default NULL, -- the mobile phone number where the patron/borrower would like to receive notices (if SNS turned on) + `sms_provider_id` int(11) DEFAULT NULL, -- the provider of the mobile phone number defined in smsalertnumber + `privacy` integer(11) DEFAULT '1' NOT NULL, -- patron/borrower's privacy settings related to their reading history + `privacy_guarantor_checkouts` tinyint(1) NOT NULL DEFAULT '0', -- controls if relatives can see this patron's checkouts + `primary_contact_method` varchar(45) DEFAULT NULL, -- useful for reporting purposes + UNIQUE KEY `cardnumber` (`cardnumber`), + PRIMARY KEY `borrowernumber` (`borrowernumber`), + KEY `categorycode` (`categorycode`), + KEY `branchcode` (`branchcode`), + UNIQUE KEY `userid` (`userid`), + KEY `guarantorid` (`guarantorid`), + KEY `surname_idx` (`surname`(255)), + KEY `firstname_idx` (`firstname`(255)), + KEY `othernames_idx` (`othernames`(255)), + KEY `sms_provider_id` (`sms_provider_id`), + CONSTRAINT `borrowers_ibfk_1` FOREIGN KEY (`categorycode`) REFERENCES `categories` (`categorycode`), + CONSTRAINT `borrowers_ibfk_2` FOREIGN KEY (`branchcode`) REFERENCES `branches` (`branchcode`), + CONSTRAINT `borrowers_ibfk_3` FOREIGN KEY (`sms_provider_id`) REFERENCES `sms_providers` (`id`) ON UPDATE CASCADE ON DELETE SET NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- -- Table structure for table `borrower_attribute_types` -- @@ -632,6 +721,7 @@ CREATE TABLE `deletedborrowers` ( -- stores data related to the patrons/borrower `checkprevcheckout` varchar(7) NOT NULL default 'inherit', -- produce a warning for this patron if this item has previously been checked out to this patron if 'yes', not if 'no', defer to category setting if 'inherit'. `updated_on` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, -- time of last change could be useful for synchronization with external systems (among others) `lastseen` datetime default NULL, -- last time a patron has been seed (connected at the OPAC or staff interface) + `primary_contact_method` varchar(45) DEFAULT NULL, -- useful for reporting purposes KEY borrowernumber (borrowernumber), KEY `cardnumber` (`cardnumber`), KEY `sms_provider_id` (`sms_provider_id`) @@ -3402,6 +3492,7 @@ CREATE TABLE IF NOT EXISTS `borrower_modifications` ( `contactname` mediumtext, `contactfirstname` text, `contacttitle` text, + `primary_contact_method` varchar(45) DEFAULT NULL, -- useful for reporting purposes `guarantorid` int(11) DEFAULT NULL, `borrowernotes` mediumtext, `relationship` varchar(100) DEFAULT NULL, diff --git a/installer/data/mysql/updatedatabase.pl b/installer/data/mysql/updatedatabase.pl index 4c47510..f5a0160 100755 --- a/installer/data/mysql/updatedatabase.pl +++ b/installer/data/mysql/updatedatabase.pl @@ -13738,6 +13738,7 @@ foreach my $file ( sort readdir $dirh ) { } } + =head1 FUNCTIONS =head2 TableExists($table) 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 a66826d..dc0fcd3 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/members/memberentrygen.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/members/memberentrygen.tt @@ -493,7 +493,8 @@ $(document).ready(function() { [% UNLESS nophone && nophonepro && nomobile && noemail && noemailpro && nofax %]
- Contact
    + Contact +
      [% UNLESS nophone %]
    1. [% IF ( mandatoryphone ) %] @@ -556,7 +557,7 @@ $(document).ready(function() { [% IF ( mandatoryemailpro ) %]Required[% END %]
    2. [% END %] - [% UNLESS nofax %] + [% UNLESS nofax %]
    3. [% IF ( mandatoryfax ) %]
    4. - [% END %] -
    + + [% END %] +
  1. + + +
  2. +
+
[%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 209671e..35ba186 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/members/moremember.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/members/moremember.tt @@ -265,6 +265,20 @@ function validate1(date) { [% END %] [% END %] + [% SWITCH primary_contact_method %] + [% CASE 'phone' %] +
  • Main contact method: Phone
  • + [% CASE 'phonepro' %] +
  • Main contact method: Secondary phone
  • + [% CASE 'mobile' %] +
  • Main contact method: Other Phone
  • + [% CASE 'email' %] +
  • Main contact method: Primary email
  • + [% CASE 'emailpro' %] +
  • Main contact method: Secondary email
  • + [% CASE 'fax' %] +
  • Main contact method: Fax
  • + [% END %]
    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 53401b9..a68d787 100644 --- a/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-memberentry.tt +++ b/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-memberentry.tt @@ -566,6 +566,56 @@ [% IF mandatory.defined('fax') %]Required[% END %] [% END %] +
  • + + +
  • [% END %] diff --git a/members/memberentry.pl b/members/memberentry.pl index 2fcaa72..b80e4d5 100755 --- a/members/memberentry.pl +++ b/members/memberentry.pl @@ -605,6 +605,16 @@ $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' ); @@ -612,7 +622,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 55b0901..fbd250a 100755 --- a/members/moremember.pl +++ b/members/moremember.pl @@ -329,7 +329,8 @@ $template->param( borrowernumber => $borrowernumber, othernames => $data->{'othernames'}, categoryname => $data->{'description'}, - was_renewed => scalar $input->param('was_renewed') ? 1 : 0, + primary_contact_method => $data->{'primary_contact_method'}, + was_renewed => $input->param('was_renewed') ? 1 : 0, todaysdate => output_pref({ dt => dt_from_string, dateformat => 'iso', dateonly => 1 }), totalprice => sprintf("%.2f", $totalprice), totaldue => sprintf("%.2f", $total), diff --git a/opac/opac-memberentry.pl b/opac/opac-memberentry.pl index c1610a1..1966442 100755 --- a/opac/opac-memberentry.pl +++ b/opac/opac-memberentry.pl @@ -85,6 +85,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); if ( $action eq 'create' ) { -- 1.9.1