View | Details | Raw Unified | Return to bug 33847
Collapse All | Expand All

(-)a/installer/data/mysql/db_revs/220600024.pl (-46 / +41 lines)
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
- 

Return to bug 33847