@@ -, +, @@ informations. --- 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 --- a/Koha/Schema/Result/Borrower.pm +++ a/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 --- a/Koha/Schema/Result/BorrowerModification.pm +++ a/Koha/Schema/Result/BorrowerModification.pm @@ -406,6 +406,13 @@ __PACKAGE__->table("borrower_modifications"); =cut +=head2 primary_contact_method + + data_type: 'tinyint' + default_value: 0 + is_nullable: 0 + +=cut __PACKAGE__->add_columns( "timestamp", { @@ -566,6 +573,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 }, ); =head1 PRIMARY KEY --- a/Koha/Schema/Result/Deletedborrower.pm +++ a/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 }, ); --- a/installer/data/mysql/atomicupdate/borrowers_primary_contact_method.sql +++ a/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`; --- a/installer/data/mysql/kohastructure.sql +++ a/installer/data/mysql/kohastructure.sql @@ -194,6 +194,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` -- @@ -622,6 +711,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`) @@ -3397,6 +3487,7 @@ CREATE TABLE IF NOT EXISTS `borrower_modifications` ( `altcontactphone` varchar(50) DEFAULT NULL, `smsalertnumber` varchar(50) DEFAULT NULL, `privacy` int(11) DEFAULT NULL, + `primary_contact_method` varchar(45) DEFAULT NULL, -- useful for reporting purposes PRIMARY KEY (`verification_token`,`borrowernumber`), KEY `verification_token` (`verification_token`), KEY `borrowernumber` (`borrowernumber`) --- a/installer/data/mysql/updatedatabase.pl +++ a/installer/data/mysql/updatedatabase.pl @@ -13116,6 +13116,7 @@ foreach my $file ( sort readdir $dirh ) { } } + =head1 FUNCTIONS =head2 TableExists($table) --- a/koha-tmpl/intranet-tmpl/prog/en/modules/members/memberentrygen.tt +++ a/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 %] --- a/koha-tmpl/intranet-tmpl/prog/en/modules/members/moremember.tt +++ a/koha-tmpl/intranet-tmpl/prog/en/modules/members/moremember.tt @@ -269,6 +269,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 %]
    --- a/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-memberentry.tt +++ a/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-memberentry.tt @@ -566,6 +566,56 @@ [% IF mandatory.defined('fax') %]Required[% END %] [% END %] +
  • + + +
  • [% END %] --- a/members/memberentry.pl +++ a/members/memberentry.pl @@ -549,6 +549,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' ); @@ -556,7 +566,6 @@ $template->param( roadtypes => $roadtypes, cities => $cities, ); - my $default_borrowertitle = ''; unless ( $op eq 'duplicate' ) { $default_borrowertitle=$data{'title'} } --- a/members/moremember.pl +++ a/members/moremember.pl @@ -326,7 +326,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), --- a/opac/opac-memberentry.pl +++ a/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' ) { --