Bug 30650: Add new permission manage_curbside_pickups
[koha.git] / installer / data / mysql / atomicupdate / bug_30650.pl
1 use Modern::Perl;
2
3 return {
4     bug_number  => "30650",
5     description => "Curbside pickup tables",
6     up          => sub {
7         my ($args) = @_;
8         my ( $dbh, $out ) = @$args{qw(dbh out)};
9         unless ( TableExists('curbside_pickup_policy') ) {
10             $dbh->do(
11                 q{
12             CREATE TABLE `curbside_pickup_policy` (
13               `id` int(11) NOT NULL auto_increment,
14               `branchcode` varchar(10) NOT NULL,
15               `enabled` TINYINT(1) NOT NULL DEFAULT 0,
16               `pickup_interval` INT(2) NOT NULL DEFAULT 0,
17               `patrons_per_interval` INT(2) NOT NULL DEFAULT 0,
18               `patron_scheduled_pickup` TINYINT(1) NOT NULL DEFAULT 0,
19               `sunday_start_hour` INT(2) NULL DEFAULT NULL,
20               `sunday_start_minute` INT(2) NULL DEFAULT NULL,
21               `sunday_end_hour` INT(2) NULL DEFAULT NULL,
22               `sunday_end_minute` INT(2) NULL DEFAULT NULL,
23               `monday_start_hour` INT(2) NULL DEFAULT NULL,
24               `monday_start_minute` INT(2) NULL DEFAULT NULL,
25               `monday_end_hour` INT(2) NULL DEFAULT NULL,
26               `monday_end_minute` INT(2) NULL DEFAULT NULL,
27               `tuesday_start_hour` INT(2) NULL DEFAULT NULL,
28               `tuesday_start_minute` INT(2) NULL DEFAULT NULL,
29               `tuesday_end_hour` INT(2) NULL DEFAULT NULL,
30               `tuesday_end_minute` INT(2) NULL DEFAULT NULL,
31               `wednesday_start_hour` INT(2) NULL DEFAULT NULL,
32               `wednesday_start_minute` INT(2) NULL DEFAULT NULL,
33               `wednesday_end_hour` INT(2) NULL DEFAULT NULL,
34               `wednesday_end_minute` INT(2) NULL DEFAULT NULL,
35               `thursday_start_hour` INT(2) NULL DEFAULT NULL,
36               `thursday_start_minute` INT(2) NULL DEFAULT NULL,
37               `thursday_end_hour` INT(2) NULL DEFAULT NULL,
38               `thursday_end_minute` INT(2) NULL DEFAULT NULL,
39               `friday_start_hour` INT(2) NULL DEFAULT NULL,
40               `friday_start_minute` INT(2) NULL DEFAULT NULL,
41               `friday_end_hour` INT(2) NULL DEFAULT NULL,
42               `friday_end_minute` INT(2) NULL DEFAULT NULL,
43               `saturday_start_hour` INT(2) NULL DEFAULT NULL,
44               `saturday_start_minute` INT(2) NULL DEFAULT NULL,
45               `saturday_end_hour` INT(2) NULL DEFAULT NULL,
46               `saturday_end_minute` INT(2) NULL DEFAULT NULL,
47               PRIMARY KEY (`id`),
48               UNIQUE KEY (`branchcode`),
49               FOREIGN KEY (branchcode) REFERENCES branches(branchcode) ON DELETE CASCADE ON UPDATE CASCADE
50             ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
51         }
52             );
53         }
54         unless ( TableExists('curbside_pickups') ) {
55
56             $dbh->do(
57                 q{
58             CREATE TABLE `curbside_pickups` (
59               `id` int(11) NOT NULL auto_increment,
60               `borrowernumber` int(11) NOT NULL,
61               `branchcode` varchar(10) NOT NULL,
62               `scheduled_pickup_datetime` datetime NOT NULL,
63               `staged_datetime` datetime NULL DEFAULT NULL,
64               `staged_by` int(11) NULL DEFAULT NULL,
65               `arrival_datetime` datetime NULL DEFAULT NULL,
66               `delivered_datetime` datetime NULL DEFAULT NULL,
67               `delivered_by` int(11) NULL DEFAULT NULL,
68               `notes` text NULL DEFAULT NULL,
69               PRIMARY KEY (`id`),
70               FOREIGN KEY (branchcode) REFERENCES branches(branchcode) ON DELETE CASCADE ON UPDATE CASCADE,
71               FOREIGN KEY (borrowernumber) REFERENCES borrowers(borrowernumber) ON DELETE CASCADE ON UPDATE CASCADE,
72               FOREIGN KEY (staged_by) REFERENCES borrowers(borrowernumber) ON DELETE SET NULL ON UPDATE CASCADE
73             ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
74             }
75             );
76         }
77         unless ( TableExists('curbside_pickup_issues') ) {
78             $dbh->do(
79                 q{
80             CREATE TABLE `curbside_pickup_issues` (
81               `id` int(11) NOT NULL auto_increment,
82               `curbside_pickup_id` int(11) NOT NULL,
83               `issue_id` int(11) NOT NULL,
84               `reserve_id` int(11) NOT NULL,
85               PRIMARY KEY (`id`),
86               FOREIGN KEY (curbside_pickup_id) REFERENCES curbside_pickups(id) ON DELETE CASCADE ON UPDATE CASCADE
87             ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
88                 }
89             );
90         }
91
92         $dbh->do(q{
93             INSERT IGNORE INTO systempreferences (`variable`, `value`, `options`, `explanation`, `type` )
94             VALUES
95             ('CurbsidePickup', '0', NULL, 'Enable curbside pickup', 'YesNo')
96         });
97
98         $dbh->do(qq{
99             INSERT IGNORE permissions (module_bit, code, description)
100             VALUES
101             (3, 'manage_curbside_pickups', 'Manage curbside pickups')
102         });
103     }
104   }