46b0d552b7d612d3afecdc660e4e1afe4a50828a
[koha.git] / installer / data / mysql / atomicupdate / bug_23805_credit.perl
1 $DBversion = 'XXX';    # will be replaced by the RM
2 if ( CheckVersion($DBversion) ) {
3
4     # Adding account_credit_types
5     $dbh->do(
6         qq{
7             CREATE TABLE IF NOT EXISTS account_credit_types (
8               code varchar(80) NOT NULL,
9               description varchar(200) NULL,
10               can_be_added_manually tinyint(4) NOT NULL DEFAULT 1,
11               is_system tinyint(1) NOT NULL DEFAULT 0,
12               PRIMARY KEY (code)
13             ) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_unicode_ci
14           }
15     );
16
17     # Adding account_credit_types_branches
18     $dbh->do(
19         qq{
20             CREATE TABLE IF NOT EXISTS account_credit_types_branches (
21                 credit_type_code VARCHAR(80),
22                 branchcode VARCHAR(10),
23                 FOREIGN KEY (credit_type_code) REFERENCES account_credit_types(code) ON DELETE CASCADE,
24                 FOREIGN KEY (branchcode) REFERENCES branches(branchcode) ON DELETE CASCADE
25             ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
26         }
27     );
28
29     # Populating account_credit_types
30     $dbh->do(
31         qq{
32             INSERT IGNORE INTO account_credit_types (
33               code,
34               description,
35               can_be_added_manually,
36               is_system
37             )
38             VALUES
39               ('Pay', 'Payment', 0, 1),
40               ('PAY', 'Payment', 0, 1),
41               ('W', 'Writeoff', 0, 1),
42               ('WO', 'Writeoff', 0, 1),
43               ('FOR', 'Forgiven', 1, 1),
44               ('C', 'Credit', 1, 1),
45               ('LOST_RETURN', 'Lost item fee refund', 0, 1)
46         }
47     );
48
49     # Adding credit_type_code to accountlines
50     unless ( column_exists('accountlines', 'credit_type_code') ) {
51         $dbh->do(
52             qq{
53                 ALTER IGNORE TABLE accountlines
54                 ADD
55                   credit_type_code varchar(80) DEFAULT NULL
56                 AFTER
57                   accounttype
58               }
59         );
60     }
61
62     # Linking credit_type_code in accountlines to code in account_credit_types
63     unless ( foreign_key_exists( 'accountlines', 'accountlines_ibfk_credit_type' ) ) {
64         $dbh->do(
65             qq{
66             ALTER TABLE accountlines ADD CONSTRAINT `accountlines_ibfk_credit_type` FOREIGN KEY (`credit_type_code`) REFERENCES `account_credit_types` (`code`) ON DELETE SET NULL ON UPDATE CASCADE
67               }
68         );
69     }
70
71     # Dropping the check constraint in accountlines
72     $dbh->do(
73         qq{
74         ALTER TABLE accountlines ADD CONSTRAINT `accountlines_check_type` CHECK (accounttype IS NOT NULL OR credit_type_code IS NOT NULL)
75         }
76     );
77
78     # Populating credit_type_code
79     $dbh->do(
80         qq{
81         UPDATE accountlines SET credit_type_code = accounttype, accounttype = NULL WHERE accounttype IN (SELECT code from account_credit_types)
82         }
83     );
84
85     # Adding a check constraints to accountlines
86     $dbh->do(
87         qq{
88         ALTER TABLE accountlines ADD CONSTRAINT `accountlines_check_type` CHECK (accounttype IS NOT NULL OR credit_type_code IS NOT NULL)
89         }
90     );
91
92     SetVersion($DBversion);
93     print "Upgrade to $DBversion done (Bug 23049 - Add account debit_credit)\n";
94 }