From a79cb4a01498a60aef5f34adf6293f7478f92568 Mon Sep 17 00:00:00 2001 From: Jonathan Druart Date: Fri, 29 Apr 2022 17:52:18 +0200 Subject: [PATCH] Bug 30650: Adjust atomic update Take into account existing installs using the plugins Sponsored-by: Association KohaLa - https://koha-fr.org/ --- .../data/mysql/atomicupdate/bug_30650.pl | 68 +++++++++++++++++++ installer/data/mysql/kohastructure.sql | 46 +++++-------- 2 files changed, 85 insertions(+), 29 deletions(-) diff --git a/installer/data/mysql/atomicupdate/bug_30650.pl b/installer/data/mysql/atomicupdate/bug_30650.pl index 3b186f93ca9..e729382b87a 100755 --- a/installer/data/mysql/atomicupdate/bug_30650.pl +++ b/installer/data/mysql/atomicupdate/bug_30650.pl @@ -51,6 +51,74 @@ return { } ); } + + unless ( TableExists('curbside_pickup_opening_slots') ) { + $dbh->do(q{ + CREATE TABLE `curbside_pickup_opening_slots` ( + `id` INT(11) NOT NULL AUTO_INCREMENT, + `curbside_pickup_policy_id` INT(11) NOT NULL, + `day` INT(1) NOT NULL, + `start_hour` INT(2) NOT NULL, + `start_minute` INT(2) NOT NULL, + `end_hour` INT(2) NOT NULL, + `end_minute` INT(2) NOT NULL, + PRIMARY KEY (`id`), + FOREIGN KEY (curbside_pickup_policy_id) REFERENCES curbside_pickup_policy(id) ON DELETE CASCADE ON UPDATE CASCADE + ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; + }); + my $existing_slots = $dbh->selectall_arrayref(q{SELECT * FROM curbside_pickup_policy}, { Slice => {} }); + my $insert_sth = $dbh->prepare(q{INSERT INTO curbside_pickup_opening_slots ( curbside_pickup_policy_id, day, start_hour, start_minute, end_hour, end_minute ) VALUES (?, ?, ?, ?, ?, ?)}); + for my $slot ( @$existing_slots ) { + my $day_i = 0; + for my $day ( qw( sunday monday tuesday wednesday thursday friday saturday ) ) { + my $start_hour = $slot->{$day . '_start_hour'}; + my $start_minute = $slot->{$day . '_start_minute'}; + my $end_hour = $slot->{$day . '_end_hour'}; + my $end_minute = $slot->{$day . '_end_minute'}; + next unless $start_hour && $start_minute && $end_hour && $end_minute; + $insert_sth->execute($slot->{id}, $day_i, $start_hour, $start_minute, $end_hour, $end_minute); + $day_i++; + } + } + $dbh->do(q{ + ALTER TABLE curbside_pickup_policy + DROP COLUMN sunday_start_hour, + DROP COLUMN sunday_start_minute, + DROP COLUMN sunday_end_hour, + DROP COLUMN sunday_end_minute, + + DROP COLUMN monday_start_hour, + DROP COLUMN monday_start_minute, + DROP COLUMN monday_end_hour, + DROP COLUMN monday_end_minute, + + DROP COLUMN tuesday_start_hour, + DROP COLUMN tuesday_start_minute, + DROP COLUMN tuesday_end_hour, + DROP COLUMN tuesday_end_minute, + + DROP COLUMN wednesday_start_hour, + DROP COLUMN wednesday_start_minute, + DROP COLUMN wednesday_end_hour, + DROP COLUMN wednesday_end_minute, + + DROP COLUMN thursday_start_hour, + DROP COLUMN thursday_start_minute, + DROP COLUMN thursday_end_hour, + DROP COLUMN thursday_end_minute, + + DROP COLUMN friday_start_hour, + DROP COLUMN friday_start_minute, + DROP COLUMN friday_end_hour, + DROP COLUMN friday_end_minute, + + DROP COLUMN saturday_start_hour, + DROP COLUMN saturday_start_minute, + DROP COLUMN saturday_end_hour, + DROP COLUMN saturday_end_minute + }); + } + unless ( TableExists('curbside_pickups') ) { $dbh->do( diff --git a/installer/data/mysql/kohastructure.sql b/installer/data/mysql/kohastructure.sql index 7c6eccc9774..685dd23b8d2 100644 --- a/installer/data/mysql/kohastructure.sql +++ b/installer/data/mysql/kohastructure.sql @@ -2284,40 +2284,28 @@ CREATE TABLE `curbside_pickup_policy` ( `pickup_interval` INT(2) NOT NULL DEFAULT 0, `patrons_per_interval` INT(2) NOT NULL DEFAULT 0, `patron_scheduled_pickup` TINYINT(1) NOT NULL DEFAULT 0, - `sunday_start_hour` INT(2) NULL DEFAULT NULL, - `sunday_start_minute` INT(2) NULL DEFAULT NULL, - `sunday_end_hour` INT(2) NULL DEFAULT NULL, - `sunday_end_minute` INT(2) NULL DEFAULT NULL, - `monday_start_hour` INT(2) NULL DEFAULT NULL, - `monday_start_minute` INT(2) NULL DEFAULT NULL, - `monday_end_hour` INT(2) NULL DEFAULT NULL, - `monday_end_minute` INT(2) NULL DEFAULT NULL, - `tuesday_start_hour` INT(2) NULL DEFAULT NULL, - `tuesday_start_minute` INT(2) NULL DEFAULT NULL, - `tuesday_end_hour` INT(2) NULL DEFAULT NULL, - `tuesday_end_minute` INT(2) NULL DEFAULT NULL, - `wednesday_start_hour` INT(2) NULL DEFAULT NULL, - `wednesday_start_minute` INT(2) NULL DEFAULT NULL, - `wednesday_end_hour` INT(2) NULL DEFAULT NULL, - `wednesday_end_minute` INT(2) NULL DEFAULT NULL, - `thursday_start_hour` INT(2) NULL DEFAULT NULL, - `thursday_start_minute` INT(2) NULL DEFAULT NULL, - `thursday_end_hour` INT(2) NULL DEFAULT NULL, - `thursday_end_minute` INT(2) NULL DEFAULT NULL, - `friday_start_hour` INT(2) NULL DEFAULT NULL, - `friday_start_minute` INT(2) NULL DEFAULT NULL, - `friday_end_hour` INT(2) NULL DEFAULT NULL, - `friday_end_minute` INT(2) NULL DEFAULT NULL, - `saturday_start_hour` INT(2) NULL DEFAULT NULL, - `saturday_start_minute` INT(2) NULL DEFAULT NULL, - `saturday_end_hour` INT(2) NULL DEFAULT NULL, - `saturday_end_minute` INT(2) NULL DEFAULT NULL, - `patron_scheduled_pickup` TINYINT(1) NOT NULL DEFAULT 0, PRIMARY KEY (`id`), UNIQUE KEY (`branchcode`), FOREIGN KEY (branchcode) REFERENCES branches(branchcode) ON DELETE CASCADE ON UPDATE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; +-- +-- Table structure for table `curbside_pickup_opening_slots` +-- + +DROP TABLE IF EXISTS `curbside_pickup_opening_slots`; +CREATE TABLE `curbside_pickup_opening_slots` ( + `id` INT(11) NOT NULL AUTO_INCREMENT, + `curbside_pickup_policy_id` INT(11) NOT NULL, + `day` TINYINT(1) NOT NULL, + `start_hour` INT(2) NOT NULL, + `start_minute` INT(2) NOT NULL, + `end_hour` INT(2) NOT NULL, + `end_minute` INT(2) NOT NULL, + PRIMARY KEY (`id`), + FOREIGN KEY (curbside_pickup_policy_id) REFERENCES curbside_pickup_policy(id) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; + -- -- Table structure for table `curbside_pickups` -- -- 2.25.1