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

(-)a/installer/data/mysql/db_revs/220600024.pl (-31 / +45 lines)
Lines 1-41 Link Here
1
use Modern::Perl;
1
use Modern::Perl;
2
2
3
return {
3
return {
4
    bug_number => "29012",
4
    bug_number  => "29012/33847",    # dbrev fixed on report 33847
5
    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",
6
    up => sub {
6
    up          => sub {
7
        my ($args) = @_;
7
        my ($args) = @_;
8
        my ($dbh, $out) = @$args{qw(dbh out)};
8
        my ( $dbh, $out ) = @$args{qw(dbh out)};
9
        my %default_rule_values = (
9
        my %default_rule_values = (
10
            issuelength             => 0,
10
            issuelength             => 0,
11
            hardduedate             => '',
11
            hardduedate             => q{},
12
            unseen_renewals_allowed   => '',
12
            unseen_renewals_allowed => q{},
13
            rentaldiscount          => 0,
13
            rentaldiscount          => 0,
14
            decreaseloanholds       => '',
14
            decreaseloanholds       => q{},
15
        );
15
        );
16
        while (my ($rule_name, $rule_value) = each (%default_rule_values)) {
16
17
            $dbh->do(q{
17
        my $sth = $dbh->prepare(
18
                INSERT IGNORE INTO circulation_rules (branchcode, categorycode, itemtype, rule_name, rule_value)
18
            q{
19
                    SELECT branchcode, categorycode, itemtype, ?, ? FROM circulation_rules cr
19
            SELECT codes.branchcode, codes.categorycode, codes.itemtype
20
                        WHERE EXISTS (
20
                FROM circulation_rules codes
21
                            SELECT * FROM circulation_rules cr2
21
            WHERE codes.rule_name = 'fine'
22
                                WHERE
22
                AND NOT EXISTS
23
                                    cr2.rule_name="suspension_chargeperiod"
23
                    (SELECT NULL FROM circulation_rules cr
24
                                    AND ( (cr2.branchcode=cr.branchcode) OR ( ISNULL(cr2.branchcode) AND ISNULL(cr.branchcode) ) )
24
                    WHERE cr.rule_name = ?
25
                                    AND ( (cr2.categorycode=cr.categorycode) OR ( ISNULL(cr2.categorycode) AND ISNULL(cr.categorycode) ) )
25
                    AND cr.branchcode <=> codes.branchcode
26
                                    AND ( (cr2.itemtype=cr.itemtype) OR ( ISNULL(cr2.itemtype) AND ISNULL(cr.itemtype) ) )
26
                    AND cr.categorycode <=> codes.categorycode
27
                        )
27
                    AND cr.itemtype <=> codes.itemtype)
28
                        AND NOT EXISTS (
28
        }
29
                            SELECT * FROM circulation_rules cr2
29
        );
30
                                WHERE
30
        my $insert_sth = $dbh->prepare(
31
                                    cr2.rule_name=?
31
            q{
32
                                    AND ( (cr2.branchcode=cr.branchcode) OR ( ISNULL(cr2.branchcode) AND ISNULL(cr.branchcode) ) )
32
            INSERT IGNORE INTO circulation_rules (branchcode, categorycode, itemtype, rule_name, rule_value)
33
                                    AND ( (cr2.categorycode=cr.categorycode) OR ( ISNULL(cr2.categorycode) AND ISNULL(cr.categorycode) ) )
33
            SELECT codes.branchcode, codes.categorycode, codes.itemtype, ?, IFNULL(effective.rule_value, ?)
34
                                    AND ( (cr2.itemtype=cr.itemtype) OR ( ISNULL(cr2.itemtype) AND ISNULL(cr.itemtype) ) )
34
                FROM circulation_rules codes
35
                        )
35
            LEFT JOIN circulation_rules effective
36
                        GROUP BY branchcode, categorycode, itemtype
36
                ON effective.rule_name = ?
37
            }, undef, $rule_name, $rule_value, $rule_name);
37
                AND (effective.branchcode <=> codes.branchcode OR effective.branchcode IS NULL)
38
                AND (effective.categorycode <=> codes.categorycode OR effective.categorycode IS NULL)
39
                AND (effective.itemtype <=> codes.itemtype OR effective.itemtype IS NULL)
40
            WHERE codes.branchcode <=> ? AND codes.categorycode <=> ? AND codes.itemtype <=> ? AND codes.rule_name = 'fine'
41
            ORDER BY effective.branchcode DESC, effective.categorycode DESC, effective.itemtype DESC
42
            LIMIT 1
38
        }
43
        }
39
        say $out "Add default values for blank circulation rules that weren't saved to the database";
44
        );
45
        my ( $branchcode, $categorycode, $itemtype );
46
        while ( my ( $rule_name, $rule_value ) = each(%default_rule_values) ) {
47
            $sth->execute($rule_name);
48
            $sth->bind_columns( \( $branchcode, $categorycode, $itemtype ) );
49
            while ( $sth->fetch ) {
50
                $insert_sth->execute( $rule_name, $rule_value, $rule_name, $branchcode, $categorycode, $itemtype );
51
            }
52
        }
53
54
        say $out "Set derived values for blank circulation rules that weren't saved to the database";
40
    },
55
    },
41
}
56
};
42
- 

Return to bug 33847