@@ -, +, @@ update - That one rule that you set as empty, now should have "Expire reserve charge" equal 42, i.e. that one you set to the value you set ExpireReservesMaxPickUpDelayCharge in step 1. - All rules that had numerical values set previously should have been exist untouched. --- admin/smart-rules.pl | 2 +- .../data/mysql/atomicupdate/bug_25711.pl | 47 ++++++++++++++++--- .../prog/en/modules/admin/smart-rules.tt | 6 +-- 3 files changed, 42 insertions(+), 13 deletions(-) --- a/admin/smart-rules.pl +++ a/admin/smart-rules.pl @@ -286,7 +286,7 @@ elsif ($op eq 'add') { my $article_requests = $input->param('article_requests') || 'no'; my $overduefinescap = $input->param('overduefinescap') || q{}; my $cap_fine_to_replacement_price = ($input->param('cap_fine_to_replacement_price') || q{}) eq 'on'; - my $expire_reserves_charge = $input->param('expire_reserves_charge') // q{}; + my $expire_reserves_charge = $input->param('expire_reserves_charge') || 0; my $note = $input->param('note'); my $decreaseloanholds = $input->param('decreaseloanholds') || q{}; my $recalls_allowed = $input->param('recalls_allowed'); --- a/installer/data/mysql/atomicupdate/bug_25711.pl +++ a/installer/data/mysql/atomicupdate/bug_25711.pl @@ -12,14 +12,47 @@ return { WHERE variable='ExpireReservesMaxPickUpDelayCharge'; }); - $expire_reserves_charge //= 0; + $expire_reserves_charge ||= 0; - $dbh->do(qq{ - INSERT INTO circulation_rules - ( categorycode, branchcode, itemtype, rule_name, rule_value ) - VALUES - ( NULL, NULL, NULL, 'expire_reserves_charge', $expire_reserves_charge ); - }); + my $sth = $dbh->prepare("SELECT branchcode, categorycode, itemtype FROM circulation_rules + GROUP BY branchcode, categorycode, itemtype"); + $sth->execute(); + + while ( my $r = $sth->fetchrow_hashref ) { + my ($expire_reserves_charge_value) = $dbh->do(" + DELETE FROM circulation_rules + WHERE + categorycode ".(defined $r->{categorycode} ? "= '$r->{categorycode}'" : 'IS NULL')." + AND branchcode ".(defined $r->{branchcode} ? "= '$r->{branchcode}'" : 'IS NULL')." + AND itemtype ".(defined $r->{itemtype} ? "= '$r->{itemtype}'" : 'IS NULL')." + AND rule_name = 'expire_reserves_charge' + AND (rule_value IS NULL OR rule_value = '') + "); + + my ($expire_reserves_charge_value_exists) = $dbh->selectrow_array(" + SELECT COUNT(1) FROM circulation_rules + WHERE + categorycode ".(defined $r->{categorycode} ? "= '$r->{categorycode}'" : 'IS NULL')." + AND branchcode ".(defined $r->{branchcode} ? "= '$r->{branchcode}'" : 'IS NULL')." + AND itemtype ".(defined $r->{itemtype} ? "= '$r->{itemtype}'" : 'IS NULL')." + AND rule_name = 'expire_reserves_charge' + "); + + if( ! $expire_reserves_charge_value_exists ) { + $dbh->do(qq{ + INSERT INTO circulation_rules + ( categorycode, branchcode, itemtype, rule_name, rule_value ) + VALUES + ( } + .(defined $r->{categorycode} ? "'$r->{categorycode}'" : 'NULL') + ."," + .(defined $r->{branchcode} ? "'$r->{branchcode}'" : 'NULL') + ."," + .(defined $r->{itemtype} ? "'$r->{itemtype}'" : 'NULL') + .qq{, 'expire_reserves_charge', $expire_reserves_charge ); + }); + } + } say $out "ExpireReservesMaxPickUpDelayCharge migrated to the expire_reserves_charge circulation rule"; }, --- a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/smart-rules.tt +++ a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/smart-rules.tt @@ -303,11 +303,7 @@ [% END %] - [% IF expire_reserves_charge.defined && expire_reserves_charge != '' %] - [% expire_reserves_charge | html %] - [% ELSE %] - Default - [% END %] + [% expire_reserves_charge | html %] [% finedays | html %] [% maxsuspensiondays | html %] --