From 091e6dfcfad6c36548ef23c0a6d053c382d75570 Mon Sep 17 00:00:00 2001 From: Aleisha Amohia Date: Tue, 7 Sep 2021 15:22:25 +1200 Subject: [PATCH] Bug 6796: Add branch_hours table and set opening hours for library Signed-off-by: Sam Lau --- Koha/Library/Hour.pm | 43 +++++++++++ Koha/Library/Hours.pm | 52 +++++++++++++ admin/branches.pl | 34 +++++++++ .../bug_6796_-_add_branch_hours_table.perl | 20 +++++ installer/data/mysql/kohastructure.sql | 16 ++++ .../prog/en/modules/admin/branches.tt | 73 +++++++++++++++++++ 6 files changed, 238 insertions(+) create mode 100644 Koha/Library/Hour.pm create mode 100644 Koha/Library/Hours.pm create mode 100644 installer/data/mysql/atomicupdate/bug_6796_-_add_branch_hours_table.perl diff --git a/Koha/Library/Hour.pm b/Koha/Library/Hour.pm new file mode 100644 index 0000000000..1b77de0724 --- /dev/null +++ b/Koha/Library/Hour.pm @@ -0,0 +1,43 @@ +package Koha::Library::Hour; + +# Copyright 2021 Aleisha Amohia +# +# This file is part of Koha. +# +# Koha is free software; you can redistribute it and/or modify it under the +# terms of the GNU General Public License as published by the Free Software +# Foundation; either version 3 of the License, or (at your option) any later +# version. +# +# Koha is distributed in the hope that it will be useful, but WITHOUT ANY +# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR +# A PARTICULAR PURPOSE. See the GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Koha; if not, see . + +use Modern::Perl; + +use Koha::Database; + +use base qw(Koha::Object); + +=head1 NAME + +Koha::Library::Hour - Koha Library Hour Object class + +=head1 API + +=head2 Class Methods + +=cut + +=head3 _type + +=cut + +sub _type { + return 'BranchHour'; +} + +1; diff --git a/Koha/Library/Hours.pm b/Koha/Library/Hours.pm new file mode 100644 index 0000000000..22e709b8c6 --- /dev/null +++ b/Koha/Library/Hours.pm @@ -0,0 +1,52 @@ +package Koha::Library::Hours; + +# Copyright 2021 Aleisha Amohia +# +# This file is part of Koha. +# +# Koha is free software; you can redistribute it and/or modify it under the +# terms of the GNU General Public License as published by the Free Software +# Foundation; either version 3 of the License, or (at your option) any later +# version. +# +# Koha is distributed in the hope that it will be useful, but WITHOUT ANY +# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR +# A PARTICULAR PURPOSE. See the GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Koha; if not, see . + +use Modern::Perl; + +use Koha::Database; +use Koha::Library::Hour; + +use base qw(Koha::Objects); + +=head1 NAME + +Koha::Library::Hours - Koha Library Hours Object set class + +=head1 API + +=head2 Class Methods + +=cut + +=head3 _type + +=cut + +sub _type { + return 'BranchHour'; +} + +=head3 object_class + +=cut + +sub object_class { + return 'Koha::Library::Hour'; +} + +1; diff --git a/admin/branches.pl b/admin/branches.pl index 112ca421d3..d0e8af7184 100755 --- a/admin/branches.pl +++ b/admin/branches.pl @@ -33,6 +33,7 @@ use Koha::Patrons; use Koha::Items; use Koha::Libraries; use Koha::SMTP::Servers; +use Koha::Library::Hours; my $input = CGI->new; my $branchcode = $input->param('branchcode'); @@ -49,9 +50,12 @@ my ( $template, $borrowernumber, $cookie ) = get_template_and_user( ); if ( $op eq 'add_form' ) { + my @opening_hours = Koha::Library::Hours->search({ branchcode => $branchcode }, { order_by => { -asc => 'day' } })->as_list; + $template->param( library => Koha::Libraries->find($branchcode), smtp_servers => Koha::SMTP::Servers->search, + opening_hours => \@opening_hours ); } elsif ( $branchcode && $op eq 'view' ) { my $library = Koha::Libraries->find($branchcode); @@ -114,6 +118,21 @@ if ( $op eq 'add_form' ) { } } + my @days = $input->multi_param("day"); + my @open_times = $input->multi_param("open_time"); + my @close_times = $input->multi_param("close_time"); + + foreach my $day ( @days ) { + if ( $open_times[$day] and $open_times[$day] eq '' ) { + $open_times[$day] = undef; + } + if ( $close_times[$day] and $close_times[$day] eq '' ) { + $close_times[$day] = undef; + } + + my $openday = Koha::Library::Hours->find({ branchcode => $branchcode, day => $day })->update({ open_time => $open_times[$day], close_time => $close_times[$day] }); + } + push @messages, { type => 'message', code => 'success_on_update' }; } ); @@ -152,6 +171,21 @@ if ( $op eq 'add_form' ) { } } + my @days = $input->multi_param("day"); + my @open_times = $input->multi_param("open_time"); + my @close_times = $input->multi_param("close_time"); + + foreach my $day ( @days ) { + if ( $open_times[$day] and $open_times[$day] eq '' ) { + $open_times[$day] = undef; + } + if ( $close_times[$day] and $close_times[$day] eq '' ) { + $close_times[$day] = undef; + } + + my $openday = Koha::Library::Hour->new({ branchcode => $branchcode, day => $day, open_time => $open_times[$day], close_time => $close_times[$day] })->store; + } + push @messages, { type => 'message', code => 'success_on_insert' }; } ); diff --git a/installer/data/mysql/atomicupdate/bug_6796_-_add_branch_hours_table.perl b/installer/data/mysql/atomicupdate/bug_6796_-_add_branch_hours_table.perl new file mode 100644 index 0000000000..964da04c61 --- /dev/null +++ b/installer/data/mysql/atomicupdate/bug_6796_-_add_branch_hours_table.perl @@ -0,0 +1,20 @@ +$DBversion = 'XXX'; +if ( CheckVersion( $DBversion ) ) { + $dbh->do(q{ DROP TABLE IF EXISTS branch_hours }); + $dbh->do(q{ + CREATE TABLE branch_hours ( + branchcode varchar(10) COLLATE utf8mb4_unicode_ci NOT NULL, + day int(1) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 0, + open_time time COLLATE utf8mb4_unicode_ci DEFAULT NULL, + close_time time COLLATE utf8mb4_unicode_ci DEFAULT NULL, + PRIMARY KEY (branchcode, day), + CONSTRAINT branch_hours_ibfk_1 FOREIGN KEY (branchcode) REFERENCES branches (branchcode) ON DELETE CASCADE ON UPDATE CASCADE + ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; + }); + + my @indexes = (0..6); + for my $i (@indexes) { + $dbh->do(q{ INSERT INTO branch_hours (branchcode, day) SELECT branchcode, ? FROM branches }, undef, $i); + } + NewVersion( $DBversion, 6796, "Add branch_hours table" ); +} diff --git a/installer/data/mysql/kohastructure.sql b/installer/data/mysql/kohastructure.sql index 8c05d11cd9..74130b9ccb 100644 --- a/installer/data/mysql/kohastructure.sql +++ b/installer/data/mysql/kohastructure.sql @@ -1594,6 +1594,22 @@ CREATE TABLE `branches` ( ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; +-- +-- Table structure for table `branch_hours` +-- +DROP TABLE IF EXISTS branch_hours; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE branch_hours ( + branchcode varchar(10) COLLATE utf8mb4_unicode_ci NOT NULL, + day int(1) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 0, + open_time time COLLATE utf8mb4_unicode_ci DEFAULT NULL, + close_time time COLLATE utf8mb4_unicode_ci DEFAULT NULL, + PRIMARY KEY (branchcode, day), + CONSTRAINT branch_hours_ibfk_1 FOREIGN KEY (branchcode) REFERENCES branches (branchcode) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + -- -- Table structure for table `branches_overdrive` -- diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/branches.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/branches.tt index 230dcd2755..2dbe1f41eb 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/branches.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/branches.tt @@ -275,6 +275,61 @@ Libraries › Administration › Koha
Set to 'yes' to show this library as a search option and on the libraries page in the OPAC.
+
  • + + + + + + + + + + + [% IF opening_hours # Existing library %] + [% daycount = 0 %] + [% FOREACH hr IN opening_hours %] + + + + + + [% daycount = daycount+1 %] + [% END %] + [% ELSE # New library %] + [% FOREACH daycount IN [0..6] %] + + + + + + [% END %] + [% END %] + +
    DayOpen timeClose time
    + [% PROCESS dayname day=daycount %] + + + [% IF hr.day == daycount && hr.open_time %] + + [% ELSE %] + + [% END %] + + [% IF hr.day == daycount && hr.close_time %] + + [% ELSE %] + + [% END %] +
    + [% PROCESS dayname day=daycount %] + + + + + +
    +
  • @@ -284,6 +339,24 @@ Libraries › Administration › Koha [% END %] +[% BLOCK dayname %] + [% IF day == 0 %] + Monday + [% ELSIF day == 1 %] + Tuesday + [% ELSIF day == 2 %] + Wednesday + [% ELSIF day == 3 %] + Thursday + [% ELSIF day == 4 %] + Friday + [% ELSIF day == 5 %] + Saturday + [% ELSE %] + Sunday + [% END %] +[% END %] + [% IF op == 'delete_confirm' and not ( items_count or patrons_count )%]
    -- 2.30.2