Bug 12446: Ability to allow guarantor relationship for all patron category types
This adds a new field "Can be guarantee" to patron categories so it
becomes possible for any category type to have a guarantor.
To test:
1) Have a patron category of type 'Adult' and one of type 'Child'
2) Confirm, by searching for the "Patron guarantor" fieldset in the
edit/create form, that:
=> a patron of the first category can't have a guarantor
=> a patron from the second category can
3) Apply patch and run updatedatabase.pl
4) Edit the categories and note the new "Can be guarantee" field
5) It should have been set to "yes" for the "Child" and to "no" for
the "Adult"
5) Repeat step 2. It should behave in the same way.
6) Edit the "Can be guarantee" for any of the category and check
that the fieldset only appears when "Can be guarantee" is set to "yes"
7) prove t/db_dependent/Patrons.t
=> tests should still pass
Signed-off-by: David Nind <david@davidnind.com>
Signed-off-by: Kyle M Hall <kyle@bywatersolutions.com>
Signed-off-by: David Nind <david@davidnind.com>
Signed-off-by: Owen Leonard <oleonard@myacpl.org>
Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org>
Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
This commit is contained in:
parent
7f60d88797
commit
b8f1b0e73d
|
|
@ -307,8 +307,7 @@ sub store {
|
|||
|
||||
# Clean up guarantors on category change if required
|
||||
$self->guarantor_relationships->delete
|
||||
if ( $self->category->category_type ne 'C'
|
||||
&& $self->category->category_type ne 'P' );
|
||||
unless ( $self->category->canbeguarantee );
|
||||
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -80,6 +80,7 @@ elsif ( $op eq 'add_validate' ) {
|
|||
my $min_password_length = $input->param('min_password_length');
|
||||
my $require_strong_password = $input->param('require_strong_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;
|
||||
|
|
@ -112,6 +113,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);
|
||||
|
|
@ -144,6 +146,7 @@ elsif ( $op eq 'add_validate' ) {
|
|||
hidelostitems => $hidelostitems,
|
||||
overduenoticerequired => $overduenoticerequired,
|
||||
category_type => $category_type,
|
||||
canbeguarantee => $canbeguarantee,
|
||||
BlockExpiredPatronOpacActions => $BlockExpiredPatronOpacActions,
|
||||
checkprevcheckout => $checkPrevCheckout,
|
||||
default_privacy => $default_privacy,
|
||||
|
|
|
|||
|
|
@ -0,0 +1,10 @@
|
|||
$DBversion = 'XXX'; # will be replaced by the RM
|
||||
if( CheckVersion( $DBversion ) ) {
|
||||
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 - Ability to allow guarantor relationship for all patron category types)\n";
|
||||
}
|
||||
|
|
@ -1664,7 +1664,8 @@ CREATE TABLE `categories` (
|
|||
`BlockExpiredPatronOpacActions` tinyint(1) NOT NULL DEFAULT -1 COMMENT 'wheither or not a patron of this category can renew books or place holds once their card has expired. 0 means they can, 1 means they cannot, -1 means use syspref BlockExpiredPatronOpacActions',
|
||||
`default_privacy` enum('default','never','forever') COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'default' COMMENT 'Default privacy setting for this patron category',
|
||||
`checkprevcheckout` varchar(7) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'inherit' COMMENT '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) DEFAULT NULL COMMENT 'if patrons of this category can do the password reset flow,',
|
||||
`canbeguarantee` tinyint(1) NOT NULL default '0',
|
||||
`reset_password` tinyint(1) DEFAULT NULL COMMENT 'if patrons of this category can do the password reset flow,',
|
||||
`change_password` tinyint(1) DEFAULT NULL COMMENT 'if patrons of this category can change their passwords in the OAPC',
|
||||
`min_password_length` smallint(6) DEFAULT NULL COMMENT 'set minimum password length for patrons in this category',
|
||||
`require_strong_password` tinyint(1) DEFAULT NULL COMMENT 'set required password strength for patrons in this category',
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@
|
|||
|
||||
[% IF CAN_user_borrowers_edit_borrowers %]
|
||||
[% IF patron.is_adult AND Koha.Preference("borrowerRelationship") %]
|
||||
<a id="addchild" class="btn btn-default" href="/cgi-bin/koha/members/memberentry.pl?op=add&guarantor_id=[% patron.borrowernumber | html %]&category_type=C"><i class="fa fa-plus"></i> Add guarantee</a>
|
||||
<a id="addchild" class="btn btn-default" href="/cgi-bin/koha/members/memberentry.pl?op=add&guarantor_id=[% patron.borrowernumber | html %]"><i class="fa fa-plus"></i> Add guarantee</a>
|
||||
[% END %]
|
||||
<a id="changepassword" class="btn btn-default" href="/cgi-bin/koha/members/member-password.pl?member=[% patron.borrowernumber | html %]"><i class="fa fa-lock"></i> Change password</a>
|
||||
<a id="duplicate" class="btn btn-default" href="/cgi-bin/koha/members/memberentry.pl?op=duplicate&borrowernumber=[% patron.borrowernumber | html %]"><i class="fa fa-copy"></i> Duplicate</a>
|
||||
|
|
|
|||
|
|
@ -219,6 +219,18 @@
|
|||
</select>
|
||||
<span class="required">Required</span>
|
||||
</li>
|
||||
<li>
|
||||
<label for="canbeguarantee">Can be guarantee</label>
|
||||
<select name="canbeguarantee" id="canbeguarantee">
|
||||
[% IF category.canbeguarantee %]
|
||||
<option value="1" selected>Yes</option>
|
||||
<option value="0">No</option>
|
||||
[% ELSE %]
|
||||
<option value="1">Yes</option>
|
||||
<option value="0" selected>No</option>
|
||||
[% END %]
|
||||
<select>
|
||||
</li>
|
||||
<li><label for="branches">Library limitations: </label>
|
||||
<select id="branches" name="branches" multiple size="10">
|
||||
<option value="">All libraries</option>
|
||||
|
|
@ -478,6 +490,7 @@
|
|||
</td>
|
||||
</tr>
|
||||
[% END %]
|
||||
<tr><th scope="row">Can be guarantee</th><td>[% IF category.canbeguarantee %]Yes[% ELSE %]No[% END %]</td></tr>
|
||||
<tr>
|
||||
<th scope="row">Default privacy: </th>
|
||||
<td>
|
||||
|
|
@ -538,6 +551,7 @@
|
|||
[% IF ( Koha.Preference('CheckPrevCheckout') == 'softyes' || Koha.Preference('CheckPrevCheckout') == 'softno' ) %]
|
||||
<th scope="col">Check previous checkout?</th>
|
||||
[% END %]
|
||||
<th scope="col">Can be guarantee</th>
|
||||
<th scope="col">Default privacy</th>
|
||||
<th scope="col">Exclude from local holds priority</th>
|
||||
<th scope="col">Actions</th>
|
||||
|
|
@ -655,6 +669,7 @@
|
|||
[% END %]
|
||||
</td>
|
||||
[% END %]
|
||||
<td>[% IF category.canbeguarantee %] Yes [% ELSE %] no [% END %]</td>
|
||||
<td>
|
||||
[% SWITCH category.default_privacy %]
|
||||
[% CASE 'default' %]
|
||||
|
|
|
|||
|
|
@ -819,8 +819,9 @@ 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( borrower_data => \%data );
|
||||
$template->param( "show_guarantor" => $categorycode ? Koha::Patron::Categories->find($categorycode)->canbeguarantee : 1); # associate with step to know where you are
|
||||
$debug and warn "memberentry step: $step";
|
||||
$template->param( "step_$step" => 1) if $step; # associate with step to know where u are
|
||||
$template->param( step => $step ) if $step; # associate with step to know where u are
|
||||
|
||||
|
|
|
|||
|
|
@ -106,19 +106,22 @@ foreach my $b ( $patrons->as_list() ) {
|
|||
}
|
||||
|
||||
subtest "Update patron categories" => sub {
|
||||
plan tests => 24;
|
||||
plan tests => 26;
|
||||
t::lib::Mocks::mock_preference( 'borrowerRelationship', 'test' );
|
||||
my $c_categorycode = $builder->build({ source => 'Category', value => {
|
||||
category_type=>'C',
|
||||
upperagelimit=>17,
|
||||
dateofbirthrequired=>5,
|
||||
canbeguarantee=>1,
|
||||
} })->{categorycode};
|
||||
my $c_categorycode_2 = $builder->build({ source => 'Category', value => {
|
||||
category_type=>'C',
|
||||
upperagelimit=>17,
|
||||
dateofbirthrequired=>5,
|
||||
canbeguarantee=>1,
|
||||
} })->{categorycode};
|
||||
my $a_categorycode = $builder->build({ source => 'Category', value => {category_type=>'A'} })->{categorycode};
|
||||
my $a_categorycode = $builder->build({ source => 'Category', value => {category_type=>'A', canbeguarantee=>0} })->{categorycode};
|
||||
my $a_categorycode_2 = $builder->build({ source => 'Category', value => {category_type=>'A', canbeguarantee=>1} })->{categorycode};
|
||||
my $p_categorycode = $builder->build({ source => 'Category', value => {category_type=>'P'} })->{categorycode};
|
||||
my $i_categorycode = $builder->build({ source => 'Category', value => {category_type=>'I'} })->{categorycode};
|
||||
my $branchcode1 = $builder->build({ source => 'Branch' })->{branchcode};
|
||||
|
|
@ -198,6 +201,8 @@ subtest "Update patron categories" => sub {
|
|||
is( Koha::Patrons->search_patrons_to_update_category({from=>$c_categorycode_2,too_young=>1})->next->borrowernumber, $child1->borrowernumber );
|
||||
is( Koha::Patrons->search_patrons_to_update_category({from=>$c_categorycode_2,too_young=>1})->update_category_to({category=>$a_categorycode}),1,'One child patron updated to adult category because too young');
|
||||
is( Koha::Patrons->find($adult1->borrowernumber)->guarantee_relationships->guarantees->count,2,'Guarantee was removed when made adult');
|
||||
is( Koha::Patrons->search_patrons_to_update_category({from=>$c_categorycode_2})->update_category_to({category=>$a_categorycode_2}),2,'Two child patrons updated to adult category');
|
||||
is( Koha::Patrons->find($adult1->borrowernumber)->guarantee_relationships->guarantees->count,2,'Guarantees were not removed when made adult which can be guarantee');
|
||||
|
||||
is( Koha::Patrons->search_patrons_to_update_category({from=>$c_categorycode_2,too_old=>1})->next->borrowernumber, $child3->borrowernumber );
|
||||
is( Koha::Patrons->search_patrons_to_update_category({from=>$c_categorycode_2,too_old=>1})->update_category_to({category=>$a_categorycode}),1,'One child patron updated to adult category because too old');
|
||||
|
|
|
|||
Loading…
Reference in New Issue