Lines 1-60
Link Here
|
1 |
use Modern::Perl; |
1 |
use Modern::Perl; |
2 |
|
2 |
|
3 |
use Koha::CirculationRules; |
|
|
4 |
|
5 |
return { |
3 |
return { |
6 |
bug_number => "29012", |
4 |
bug_number => "29012", |
7 |
description => "Some rules are not saved when left blank while editing a 'rule' line in smart-rules.pl", |
5 |
description => "Some rules are not saved when left blank while editing a 'rule' line in smart-rules.pl", |
8 |
up => sub { |
6 |
up => sub { |
9 |
my ($args) = @_; |
7 |
my ($args) = @_; |
10 |
my ($dbh, $out) = @$args{qw(dbh out)}; |
8 |
my ( $dbh, $out ) = @$args{qw(dbh out)}; |
11 |
my %default_rule_values = ( |
9 |
my %default_rule_values = ( |
12 |
issuelength => 0, |
10 |
issuelength => 0, |
13 |
hardduedate => '', |
11 |
hardduedate => q{}, |
14 |
unseen_renewals_allowed => '', |
12 |
unseen_renewals_allowed => q{}, |
15 |
rentaldiscount => 0, |
13 |
rentaldiscount => 0, |
16 |
decreaseloanholds => '', |
14 |
decreaseloanholds => q{}, |
17 |
); |
15 |
); |
18 |
|
16 |
|
19 |
my $rules = Koha::CirculationRules->search( { rule_name => 'suspension_chargeperiod' } ); |
17 |
my $sth = $dbh->prepare( |
20 |
while ( my $rule = $rules->next ) { |
18 |
q{ |
21 |
foreach my $key ( keys %default_rule_values ) { |
19 |
SELECT codes.branchcode, codes.categorycode, codes.itemtype |
22 |
next |
20 |
FROM circulation_rules codes |
23 |
if # If there is a rule matching these criteria with defined value, we can skip it. |
21 |
WHERE codes.rule_name = 'fine' |
24 |
Koha::CirculationRules->search( |
22 |
AND NOT EXISTS |
25 |
{ |
23 |
(SELECT NULL FROM circulation_rules cr |
26 |
branchcode => $rule->branchcode, |
24 |
WHERE cr.rule_name = ? |
27 |
categorycode => $rule->categorycode, |
25 |
AND cr.branchcode <=> codes.branchcode |
28 |
itemtype => $rule->itemtype, |
26 |
AND cr.categorycode <=> codes.categorycode |
29 |
rule_name => $key, |
27 |
AND cr.itemtype <=> codes.itemtype) |
30 |
} |
28 |
} |
31 |
)->count; |
29 |
); |
32 |
|
30 |
my $insert_sth = $dbh->prepare( |
33 |
my $derived_rule = Koha::CirculationRules->get_effective_rule( |
31 |
q{ |
34 |
{ |
32 |
INSERT IGNORE INTO circulation_rules (branchcode, categorycode, itemtype, rule_name, rule_value) |
35 |
branchcode => $rule->branchcode, |
33 |
SELECT codes.branchcode, codes.categorycode, codes.itemtype, ?, IFNULL(effective.rule_value, ?) |
36 |
categorycode => $rule->categorycode, |
34 |
FROM circulation_rules codes |
37 |
itemtype => $rule->itemtype, |
35 |
LEFT JOIN circulation_rules effective |
38 |
rule_name => $key, |
36 |
ON effective.rule_name = ? |
39 |
} |
37 |
AND (effective.branchcode <=> codes.branchcode OR effective.branchcode IS NULL) |
40 |
); |
38 |
AND (effective.categorycode <=> codes.categorycode OR effective.categorycode IS NULL) |
41 |
my $value = |
39 |
AND (effective.itemtype <=> codes.itemtype OR effective.itemtype IS NULL) |
42 |
$derived_rule |
40 |
WHERE codes.branchcode <=> ? AND codes.categorycode <=> ? AND codes.itemtype <=> ? AND codes.rule_name = 'fine' |
43 |
? $derived_rule->rule_value // $default_rule_values{$key} |
41 |
ORDER BY effective.branchcode DESC, effective.categorycode DESC, effective.itemtype DESC |
44 |
: $default_rule_values{$key}; |
42 |
LIMIT 1 |
45 |
|
43 |
} |
46 |
Koha::CirculationRule->new( |
44 |
); |
47 |
{ |
45 |
my ( $branchcode, $categorycode, $itemtype ); |
48 |
branchcode => $rule->branchcode, |
46 |
while ( my ( $rule_name, $rule_value ) = each(%default_rule_values) ) { |
49 |
categorycode => $rule->categorycode, |
47 |
$sth->execute($rule_name); |
50 |
itemtype => $rule->itemtype, |
48 |
$sth->bind_columns( \( $branchcode, $categorycode, $itemtype ) ); |
51 |
rule_name => $key, |
49 |
while ( $sth->fetch ) { |
52 |
rule_value => $value, |
50 |
$insert_sth->execute( $rule_name, $rule_value, $rule_name, $branchcode, $categorycode, $itemtype ); |
53 |
} |
|
|
54 |
)->store(); |
55 |
} |
51 |
} |
56 |
} |
52 |
} |
57 |
|
53 |
|
58 |
say $out "Set derived values for blank circulation rules that weren't saved to the database"; |
54 |
say $out "Set derived values for blank circulation rules that weren't saved to the database"; |
59 |
}, |
55 |
}, |
60 |
} |
56 |
}; |
61 |
- |
|
|