Koha/installer/data/mysql/db_revs/220600024.pl
Kyle M Hall 8b04a3f642 Bug 33847: Database update replaces undefined rules with defaults rather than the value that would be used
Bug 29012 introduces a database update that sets the default values for rules that are required but undefined. This functionally changes the results of the circulation rules.

Instead, this update should find value that is being used for that rule combo and use that as the rule value, only using the default in the case that the derived rule doesn't exist or has a null value.

Test Plan:
1) Check out Koha 22.05.05
2) Create a default all/all/all rule, 3 other rules. Ensure they all have Loan period set to 7, with one of the non-default rules having a Loan period of 14.
3) Delete all but one of the non-default rules with the following query:
   Delete from circulation_rules where rule_name  = 'issuelength' and ( rule_value != 14 and not ( branchcode is null and categorycode is null and itemtype is null ) ) limit 2;
4) Check out 254f721320
5) Run updatedatabase.pl and restart
6) Note the rules were recreated with the value 0
7) Repeat steps 1-4
8) Apply this patch
9) If you're using the same database, set the version to 22.0600023 and restart
10) Run updatedatabase.pl
11) Note the rules were recreated, but the value is the derived value from the all/all/all rule!

Signed-off-by: Kevin Carnes <kevin.carnes@ub.lu.se>

Signed-off-by: Marcel de Rooy <m.de.rooy@rijksmuseum.nl>
Signed-off-by: Emily Lamancusa <emily.lamancusa@montgomerycountymd.gov>

Bug 33847: Rewrite to use SQL

Signed-off-by: Emily Lamancusa <emily.lamancusa@montgomerycountymd.gov>

Signed-off-by: Marcel de Rooy <m.de.rooy@rijksmuseum.nl>
[EDIT] Squashed, and added reference to new bug too
Signed-off-by: Katrin Fischer <katrin.fischer@bsz-bw.de>
(cherry picked from commit f6f2d1ae41)
Signed-off-by: Fridolin Somers <fridolin.somers@biblibre.com>
2024-01-03 16:07:41 +01:00

56 lines
2.5 KiB
Perl
Executable file

use Modern::Perl;
return {
bug_number => "29012/33847", # dbrev fixed on report 33847
description => "Some rules are not saved when left blank while editing a 'rule' line in smart-rules.pl",
up => sub {
my ($args) = @_;
my ( $dbh, $out ) = @$args{qw(dbh out)};
my %default_rule_values = (
issuelength => 0,
hardduedate => q{},
unseen_renewals_allowed => q{},
rentaldiscount => 0,
decreaseloanholds => q{},
);
my $sth = $dbh->prepare(
q{
SELECT codes.branchcode, codes.categorycode, codes.itemtype
FROM circulation_rules codes
WHERE codes.rule_name = 'fine'
AND NOT EXISTS
(SELECT NULL FROM circulation_rules cr
WHERE cr.rule_name = ?
AND cr.branchcode <=> codes.branchcode
AND cr.categorycode <=> codes.categorycode
AND cr.itemtype <=> codes.itemtype)
}
);
my $insert_sth = $dbh->prepare(
q{
INSERT IGNORE INTO circulation_rules (branchcode, categorycode, itemtype, rule_name, rule_value)
SELECT codes.branchcode, codes.categorycode, codes.itemtype, ?, IFNULL(effective.rule_value, ?)
FROM circulation_rules codes
LEFT JOIN circulation_rules effective
ON effective.rule_name = ?
AND (effective.branchcode <=> codes.branchcode OR effective.branchcode IS NULL)
AND (effective.categorycode <=> codes.categorycode OR effective.categorycode IS NULL)
AND (effective.itemtype <=> codes.itemtype OR effective.itemtype IS NULL)
WHERE codes.branchcode <=> ? AND codes.categorycode <=> ? AND codes.itemtype <=> ? AND codes.rule_name = 'fine'
ORDER BY effective.branchcode DESC, effective.categorycode DESC, effective.itemtype DESC
LIMIT 1
}
);
my ( $branchcode, $categorycode, $itemtype );
while ( my ( $rule_name, $rule_value ) = each(%default_rule_values) ) {
$sth->execute($rule_name);
$sth->bind_columns( \( $branchcode, $categorycode, $itemtype ) );
while ( $sth->fetch ) {
$insert_sth->execute( $rule_name, $rule_value, $rule_name, $branchcode, $categorycode, $itemtype );
}
}
say $out "Set derived values for blank circulation rules that weren't saved to the database";
},
};