@@ -, +, @@ - Enable an adult to have a guarantor: - Shows guarantees' fines in the guarantor's page: - Transfer some guarantor's information to the guarantee while adding a guarantee: - Transfer some guarantor's information to the guarantee while creating a new patron - Transfer guarantor's alternate address/contact to the guarantee while creating a new patron: - Transfer guarantor's alternate address/contact to the guarantee while adding a guarantee: --- C4/Utils/DataTables/Members.pm | 30 +++++++++++++------ admin/categories.pl | 3 ++ .../data/mysql/atomicupdate/bug_12446.perl | 21 +++++++++++++ installer/data/mysql/kohastructure.sql | 1 + installer/data/mysql/sysprefs.sql | 1 + .../prog/en/includes/members-toolbar.inc | 2 +- .../prog/en/modules/admin/categories.tt | 15 ++++++++++ .../en/modules/admin/preferences/patrons.pref | 5 ++++ .../prog/en/modules/common/patron_search.tt | 7 +++-- .../prog/en/modules/members/memberentrygen.tt | 2 +- .../prog/en/modules/members/moremember.tt | 15 +++++++--- .../members/tables/guarantor_search.tt | 2 +- koha-tmpl/intranet-tmpl/prog/js/members.js | 9 +++++- members/memberentry.pl | 9 +++++- members/moremember.pl | 13 ++++++++ svc/members/search | 6 ++++ 16 files changed, 120 insertions(+), 21 deletions(-) create mode 100644 installer/data/mysql/atomicupdate/bug_12446.perl --- a/C4/Utils/DataTables/Members.pm +++ a/C4/Utils/DataTables/Members.pm @@ -2,6 +2,7 @@ package C4::Utils::DataTables::Members; use Modern::Perl; use C4::Context; +use C4::Members; use C4::Utils::DataTables; use Koha::DateUtils; @@ -77,15 +78,26 @@ sub search { } } - my $select = "SELECT - borrowers.borrowernumber, borrowers.surname, borrowers.firstname, - borrowers.othernames, - borrowers.flags, - borrowers.streetnumber, borrowers.streettype, borrowers.address, - borrowers.address2, borrowers.city, borrowers.state, borrowers.zipcode, - borrowers.country, cardnumber, borrowers.dateexpiry, - borrowers.borrowernotes, borrowers.branchcode, borrowers.email, - borrowers.userid, borrowers.dateofbirth, borrowers.categorycode, + $dbh = C4::Context->dbh; + my @columns = qw( borrowernumber surname firstname othernames flags streetnumber streettype address address2 city state zipcode country cardnumber dateexpiry borrowernotes branchcode email userid dateofbirth categorycode phone phonepro mobile fax email emailpro); + my @guarantor_attributes = qw( streetnumber address address2 city state zipcode country branchcode phone phonepro mobile email emailpro fax ); + if( my @additional_guarantor_attributes = split(/\|/, C4::Context->preference("AdditionalGuarantorField")) ){ + $_ =~ s/(?:^\s+)|(?:\s+$)//g for (@additional_guarantor_attributes); # Trim whitespaces + @guarantor_attributes = ( @guarantor_attributes, @additional_guarantor_attributes); + } + if( @guarantor_attributes ){ + foreach my $item (@guarantor_attributes) { + if (! grep {$_ eq $item} @columns) { + push @columns, $item; + } + } + }; + my $borrowers_columns = ""; + foreach my $item (@columns) { + $borrowers_columns .= "borrowers." . $item . ", "; + } + + my $select = "SELECT " . $borrowers_columns . " categories.description AS category_description, categories.category_type, branches.branchname, borrowers.phone"; my $from = "FROM borrowers --- a/admin/categories.pl +++ a/admin/categories.pl @@ -95,6 +95,7 @@ elsif ( $op eq 'add_validate' ) { my $reset_password = $input->param('reset_password'); my $change_password = $input->param('change_password'); my @branches = grep { $_ ne q{} } $input->multi_param('branches'); + my $canbeguarantee = $input->param('canbeguarantee'); $reset_password = undef if $reset_password eq -1; $change_password = undef if $change_password eq -1; @@ -124,6 +125,7 @@ elsif ( $op eq 'add_validate' ) { $category->hidelostitems($hidelostitems); $category->overduenoticerequired($overduenoticerequired); $category->category_type($category_type); + $category->canbeguarantee($canbeguarantee); $category->BlockExpiredPatronOpacActions($BlockExpiredPatronOpacActions); $category->checkprevcheckout($checkPrevCheckout); $category->default_privacy($default_privacy); @@ -152,6 +154,7 @@ elsif ( $op eq 'add_validate' ) { hidelostitems => $hidelostitems, overduenoticerequired => $overduenoticerequired, category_type => $category_type, + canbeguarantee => $canbeguarantee, BlockExpiredPatronOpacActions => $BlockExpiredPatronOpacActions, checkprevcheckout => $checkPrevCheckout, default_privacy => $default_privacy, --- a/installer/data/mysql/atomicupdate/bug_12446.perl +++ a/installer/data/mysql/atomicupdate/bug_12446.perl @@ -0,0 +1,21 @@ +$DBversion = 'XXX'; # will be replaced by the RM +if( CheckVersion( $DBversion ) ) { + ## ******** ## + ## SYSPREFS ## + ## ******** ## + $dbh->do(q{ + INSERT IGNORE INTO systempreferences ( `variable`, `value`, `options`, `explanation`, `type` ) + VALUES ('AdditionalGuarantorField','',NULL,'Additional fields name to be transfer from guarantor to guarantee.','free'); + }); + + ## ********* ## + ## STRUCTURE ## + ## ********* ## + if ( !column_exists( 'categories', 'canbeguarantee') ){ + $dbh->do("ALTER TABLE categories ADD COLUMN `canbeguarantee` tinyint(1) NOT NULL default '0' AFTER `checkprevcheckout`"); + $dbh->do("UPDATE categories SET canbeguarantee = 1 WHERE category_type = 'P' OR category_type = 'C'"); + } + + SetVersion( $DBversion ); + print "Upgrade to $DBversion done (Bug 12446 - Enable an adult to have a guarantor)\n"; +} --- a/installer/data/mysql/kohastructure.sql +++ a/installer/data/mysql/kohastructure.sql @@ -325,6 +325,7 @@ CREATE TABLE `categories` ( -- this table shows information related to Koha patr `checkprevcheckout` varchar(7) NOT NULL default 'inherit', -- produce a warning for this patron category if this item has previously been checked out to this patron if 'yes', not if 'no', defer to syspref setting if 'inherit'. `reset_password` TINYINT(1) NULL DEFAULT NULL, -- if patrons of this category can do the password reset flow, `change_password` TINYINT(1) NULL DEFAULT NULL, -- if patrons of this category can change their passwords in the OAPC + `canbeguarantee` tinyint(1) NOT NULL default '0' PRIMARY KEY (`categorycode`), UNIQUE KEY `categorycode` (`categorycode`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; --- a/installer/data/mysql/sysprefs.sql +++ a/installer/data/mysql/sysprefs.sql @@ -9,6 +9,7 @@ INSERT INTO systempreferences ( `variable`, `value`, `options`, `explanation`, ` ('AcqViewBaskets','user','user|branch|all','Define which baskets a user is allowed to view: his own only, any within his branch or all','Choice'), ('AcqWarnOnDuplicateInvoice','0','','Warn librarians when they try to create a duplicate invoice','YesNo'), ('AdditionalFieldsInZ3950ResultSearch', '', NULL, 'Determines which MARC field/subfields are displayed in -Additional field- column in the result of a search Z3950', 'Free'), +('AdditionalGuarantorField','',NULL,'Additional fields name to be transfer from guarantor to guarantee.','free'), ('AddressFormat','us','us|de|fr','Choose format to display postal addresses', 'Choice'), ('AdlibrisCoversEnabled','0',NULL,'Display cover images in OPAC results and detail listing from Swedish retailer Adlibris.','YesNo'), ('AdlibrisCoversURL','http://www.adlibris.com/se/organisationer/showimagesafe.aspx',NULL,'Base URL for Adlibris cover image web service.','Free'), --- a/koha-tmpl/intranet-tmpl/prog/en/includes/members-toolbar.inc +++ a/koha-tmpl/intranet-tmpl/prog/en/includes/members-toolbar.inc @@ -11,7 +11,7 @@ [% IF CAN_user_borrowers_edit_borrowers %] [% IF patron.is_adult AND Koha.Preference("borrowerRelationship") %] - Add guarantee + Add guarantee [% END %] Change password Duplicate --- a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/categories.tt +++ a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/categories.tt @@ -151,6 +151,18 @@ Required +
  • + + +
  • " + "Select" }[% UNLESS loop.last %],[% END %] [% END %] ] --- a/koha-tmpl/intranet-tmpl/prog/js/members.js +++ a/koha-tmpl/intranet-tmpl/prog/js/members.js @@ -165,7 +165,7 @@ function update_category_code(category_code) { $(mytables).find(" li[data-category_code='']").show(); } -function select_user(borrowernumber, borrower, relationship) { +function select_user(borrowernumber, borrower, relationship, attributes) { let is_guarantor = $(`.guarantor-details[data-borrowernumber=${borrower.borrowernumber}]`).length; if ( is_guarantor ) { @@ -209,6 +209,13 @@ function select_user(borrowernumber, borrower, relationship) { if ( relationship ) { fieldset.find('.new_guarantor_relationship').val(relationship); } + + for (var i = 0; i < parseInt(attributes.length, 10); i++) { + var attribute = attributes[i]; + if (borrower[attribute] != null){ + document.forms.entryform[attribute].value = borrower[attribute]; + } + } } return 0; --- a/members/memberentry.pl +++ a/members/memberentry.pl @@ -806,7 +806,14 @@ if (C4::Context->preference('EnhancedMessagingPreferences')) { $template->param(TalkingTechItivaPhone => C4::Context->preference("TalkingTechItivaPhoneNotification")); } -$template->param( "show_guarantor" => ( $category_type =~ /A|I|S|X/ ) ? 0 : 1 ); # associate with step to know where you are +$template->param( "show_guarantor" => $categorycode ? Koha::Patron::Categories->find($categorycode)->canbeguarantee : 1); # associate with step to know where you are + +my @guarantor_attributes = qw( streetnumber address address2 city state zipcode country branchcode phone phonepro mobile email emailpro fax ); +if( my @additional_guarantor_attributes = split(/\|/, C4::Context->preference("AdditionalGuarantorField")) ){ + $_ =~ s/(?:^\s+)|(?:\s+$)//g for (@additional_guarantor_attributes); # Trim whitespaces + @guarantor_attributes = ( @guarantor_attributes, @additional_guarantor_attributes); +} +$template->param( "guarantor_attributes" => \@guarantor_attributes ); $debug and warn "memberentry step: $step"; $template->param(%data); $template->param( "step_$step" => 1) if $step; # associate with step to know where u are --- a/members/moremember.pl +++ a/members/moremember.pl @@ -115,6 +115,19 @@ $template->param( my $relatives_issues_count = Koha::Checkouts->count({ borrowernumber => \@relatives }); +my $count = scalar @guarantees; +if ( $count ) { + $template->param( isguarantee => 1 ); + + my $totalmount = 0; + + foreach my $guarantee (@guarantees){ + $totalmount += $guarantee->account->balance; + + } + $template->param( guarantees => \@guarantees); + $template->param( amounttot => sprintf("%.2f",$totalmount)); +} # Calculate and display patron's age if ( !$patron->is_valid_age ) { --- a/svc/members/search +++ a/svc/members/search @@ -91,12 +91,18 @@ $results = C4::Utils::DataTables::Members::search( } ) unless $results; +my @attributes = qw( streetnumber address address2 city state zipcode country branchcode phone phonepro mobile email emailpro fax ); +if( my @additional = split(/\|/, C4::Context->preference("AdditionalGuarantorField")) ){ + $_ =~ s/(?:^\s+)|(?:\s+$)//g for (@additional); # Trim whitespaces + @attributes = ( @attributes, @additional); +} $template->param( sEcho => $sEcho, iTotalRecords => $results->{iTotalRecords}, iTotalDisplayRecords => $results->{iTotalDisplayRecords}, aaData => $results->{patrons}, selection_type => $selection_type, + attributes => \@attributes ); output_with_http_headers $input, $cookie, $template->output, 'json'; --