Bug 23805: Update 'W' to 'WRITEOFF' for consistency
[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               ('PAYMENT', 'Payment', 0, 1),
40               ('WRITEOFF', 'Writeoff', 0, 1),
41               ('FORGIVEN', 'Forgiven', 1, 1),
42               ('CREDIT', 'Credit', 1, 1),
43               ('LOST_RETURN', 'Lost item fee refund', 0, 1)
44         }
45     );
46
47     # Adding credit_type_code to accountlines
48     unless ( column_exists('accountlines', 'credit_type_code') ) {
49         $dbh->do(
50             qq{
51                 ALTER IGNORE TABLE accountlines
52                 ADD
53                   credit_type_code varchar(80) DEFAULT NULL
54                 AFTER
55                   accounttype
56               }
57         );
58     }
59
60     # Linking credit_type_code in accountlines to code in account_credit_types
61     unless ( foreign_key_exists( 'accountlines', 'accountlines_ibfk_credit_type' ) ) {
62         $dbh->do(
63             qq{
64             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
65               }
66         );
67     }
68
69     # Dropping the check constraint in accountlines
70     $dbh->do(
71         qq{
72         ALTER TABLE accountlines ADD CONSTRAINT `accountlines_check_type` CHECK (accounttype IS NOT NULL OR credit_type_code IS NOT NULL)
73         }
74     );
75
76     # Update accountype 'C' to 'CREDIT'
77     $dbh->do(
78         qq{
79           UPDATE accountlines SET accounttype = 'CREDIT' WHERE accounttype = 'C' OR accounttype = 'CR'
80         }
81     );
82
83     # Update accountype 'FOR' to 'FORGIVEN'
84     $dbh->do(
85         qq{
86           UPDATE accountlines SET accounttype = 'FORGIVEN' WHERE accounttype = 'FOR' OR accounttype = 'FORW'
87         }
88     );
89
90     # Update accountype 'Pay' to 'PAYMENT'
91     $dbh->do(
92         qq{
93           UPDATE accountlines SET accounttype = 'PAYMENT' WHERE accounttype = 'Pay' OR accounttype = 'PAY'
94         }
95     );
96
97     # Update accountype 'W' to 'WRITEOFF'
98     $dbh->do(
99         qq{
100           UPDATE accountlines SET accounttype = 'WRITEOFF' WHERE accounttype = 'W' OR accounttype = 'WO'
101         }
102     );
103
104     # Populating credit_type_code
105     $dbh->do(
106         qq{
107         UPDATE accountlines SET credit_type_code = accounttype, accounttype = NULL WHERE accounttype IN (SELECT code from account_credit_types)
108         }
109     );
110
111     # Adding a check constraints to accountlines
112     $dbh->do(
113         qq{
114         ALTER TABLE accountlines ADD CONSTRAINT `accountlines_check_type` CHECK (accounttype IS NOT NULL OR credit_type_code IS NOT NULL)
115         }
116     );
117
118     SetVersion($DBversion);
119     print "Upgrade to $DBversion done (Bug 23049 - Add account debit_credit)\n";
120 }