57 lines
2.5 KiB
Perl
Executable File
57 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";
|
|
},
|
|
};
|