Bugzilla – Attachment 162090 Details for
Bug 6796
Overnight checkouts taking into account opening and closing hours
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
Bug 6796: Add library_hours table and set opening hours for library
Bug-6796-Add-libraryhours-table-and-set-opening-ho.patch (text/plain), 13.87 KB, created by
Martin Renvoize (ashimema)
on 2024-02-13 10:39:46 UTC
(
hide
)
Description:
Bug 6796: Add library_hours table and set opening hours for library
Filename:
MIME Type:
Creator:
Martin Renvoize (ashimema)
Created:
2024-02-13 10:39:46 UTC
Size:
13.87 KB
patch
obsolete
>From d823d60297c6894bece68a3f995f7db9ffd919b7 Mon Sep 17 00:00:00 2001 >From: Aleisha Amohia <aleishaamohia@hotmail.com> >Date: Tue, 7 Sep 2021 15:22:25 +1200 >Subject: [PATCH] Bug 6796: Add library_hours table and set opening hours for > library > >Sponsored-by: Catalyst IT >Signed-off-by: Sam Lau <samalau@gmail.com> >Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com> >--- > Koha/Library/Hour.pm | 51 +++++++++++++ > Koha/Library/Hours.pm | 56 ++++++++++++++ > admin/branches.pl | 34 +++++++++ > .../bug_6796_-_add_library_hours_table.pl | 35 +++++++++ > installer/data/mysql/kohastructure.sql | 13 ++++ > .../prog/en/modules/admin/branches.tt | 74 ++++++++++++++++++- > 6 files changed, 262 insertions(+), 1 deletion(-) > create mode 100644 Koha/Library/Hour.pm > create mode 100644 Koha/Library/Hours.pm > create mode 100755 installer/data/mysql/atomicupdate/bug_6796_-_add_library_hours_table.pl > >diff --git a/Koha/Library/Hour.pm b/Koha/Library/Hour.pm >new file mode 100644 >index 00000000000..bc8f4a0478e >--- /dev/null >+++ b/Koha/Library/Hour.pm >@@ -0,0 +1,51 @@ >+package Koha::Library::Hour; >+ >+# Copyright 2021 Aleisha Amohia <aleisha@catalyst.net.nz> >+# >+# 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 <http://www.gnu.org/licenses>. >+ >+use Modern::Perl; >+ >+use Koha::Database; >+ >+use base qw(Koha::Object); >+ >+=head1 NAME >+ >+Koha::Library::Hour - Koha Library Hour Object class >+ >+=head1 SYNOPSIS >+ >+use Koha::Library::Hour; >+ >+=head1 DESCRIPTION >+ >+Describes the open time and close time for a library on a given day of the week. >+ >+=head1 FUNCTIONS >+ >+=head2 Class Methods >+ >+=head3 _type >+ >+Return type of Object relating to Schema Resultset >+ >+=cut >+ >+sub _type { >+ return 'LibraryHour'; >+} >+ >+1; >diff --git a/Koha/Library/Hours.pm b/Koha/Library/Hours.pm >new file mode 100644 >index 00000000000..42c0db58853 >--- /dev/null >+++ b/Koha/Library/Hours.pm >@@ -0,0 +1,56 @@ >+package Koha::Library::Hours; >+ >+# Copyright 2021 Aleisha Amohia <aleisha@catalyst.net.nz> >+# >+# 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 <http://www.gnu.org/licenses>. >+ >+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 >+ >+Return type of object, relating to Schema Resultset >+ >+=cut >+ >+sub _type { >+ return 'LibraryHour'; >+} >+ >+=head3 object_class >+ >+Return object class >+ >+=cut >+ >+sub object_class { >+ return 'Koha::Library::Hour'; >+} >+ >+1; >diff --git a/admin/branches.pl b/admin/branches.pl >index 50e909dfa0d..fbcf002c56f 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({ library_id => $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); >@@ -116,6 +120,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({ library_id => $branchcode, day => $day })->update({ open_time => $open_times[$day], close_time => $close_times[$day] }); >+ } >+ > push @messages, { type => 'message', code => 'success_on_update' }; > } > ); >@@ -154,6 +173,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({ library_id => $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_library_hours_table.pl b/installer/data/mysql/atomicupdate/bug_6796_-_add_library_hours_table.pl >new file mode 100755 >index 00000000000..f3a506c806d >--- /dev/null >+++ b/installer/data/mysql/atomicupdate/bug_6796_-_add_library_hours_table.pl >@@ -0,0 +1,35 @@ >+use Modern::Perl; >+ >+return { >+ bug_number => "6796", >+ description => "Overnight checkouts taking into account opening and closing hours", >+ up => sub { >+ my ($args) = @_; >+ my ( $dbh, $out ) = @$args{qw(dbh out)}; >+ >+ unless ( TableExists('library_hours') ) { >+ $dbh->do( >+ q{ >+ CREATE TABLE library_hours ( >+ library_id varchar(10) COLLATE utf8mb4_unicode_ci NOT NULL, >+ day enum('0','1','2','3','4','5','6') 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 (library_id, day), >+ CONSTRAINT library_hours FOREIGN KEY (library_id) 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 library_hours (library_id, day) SELECT branchcode, ? FROM branches }, undef, >+ $i >+ ); >+ } >+ >+ say $out "Added table `library_hours`"; >+ } >+ }, >+}; >diff --git a/installer/data/mysql/kohastructure.sql b/installer/data/mysql/kohastructure.sql >index 16310f0f449..9e7bd73b8d1 100644 >--- a/installer/data/mysql/kohastructure.sql >+++ b/installer/data/mysql/kohastructure.sql >@@ -4270,6 +4270,19 @@ CREATE TABLE `letter` ( > ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; > /*!40101 SET character_set_client = @saved_cs_client */; > >+-- >+-- Table structure for table `library_hours` >+-- >+DROP TABLE IF EXISTS library_hours; >+CREATE TABLE library_hours ( >+ library_id varchar(10) COLLATE utf8mb4_unicode_ci NOT NULL, >+ day enum('0','1','2','3','4','5','6') 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 (library_id, day), >+ CONSTRAINT library_hours_ibfk_1 FOREIGN KEY (library_id) REFERENCES branches (branchcode) ON DELETE CASCADE ON UPDATE CASCADE >+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; >+ > -- > -- Table structure for table `library_groups` > -- >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 6fdb1ad4f16..cc207641f95 100644 >--- a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/branches.tt >+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/branches.tt >@@ -289,6 +289,61 @@ > </select> > <div class="hint">Set to 'yes' to show this library as a search option and on the libraries page in the OPAC.</div> > </li> >+ <li> >+ <label for="opening_hours">Opening hours: </label> >+ <table id="opening_hours_table"> >+ <thead> >+ <tr> >+ <th>Day</th> >+ <th>Open time</th> >+ <th>Close time</th> >+ </tr> >+ </thead> >+ <tbody> >+ [% IF opening_hours # Existing library %] >+ [% daycount = 0 %] >+ [% FOREACH hr IN opening_hours %] >+ <tr id="hours_[% daycount %]"> >+ <td> >+ [% PROCESS dayname day=daycount %] >+ <input type="hidden" value="[% daycount %]" name="day"> >+ </td> >+ <td> >+ [% IF hr.day == daycount && hr.open_time %] >+ <input type="time" value="[% hr.open_time %]" name="open_time"> >+ [% ELSE %] >+ <input type="time" value="" name="open_time"> >+ [% END %] >+ </td> >+ <td> >+ [% IF hr.day == daycount && hr.close_time %] >+ <input type="time" value="[% hr.close_time %]" name="close_time"> >+ [% ELSE %] >+ <input type="time" value="" name="close_time"> >+ [% END %] >+ </td> >+ </tr> >+ [% daycount = daycount+1 %] >+ [% END %] >+ [% ELSE # New library %] >+ [% FOREACH daycount IN [0..6] %] >+ <tr id="hours_[% day %]"> >+ <td> >+ [% PROCESS dayname day=daycount %] >+ <input type="hidden" value="[% daycount %]" name="day"> >+ </td> >+ <td> >+ <input type="time" value="" name="open_time"> >+ </td> >+ <td> >+ <input type="time" value="" name="close_time"> >+ </td> >+ </tr> >+ [% END %] >+ [% END %] >+ </tbody> >+ </table> >+ </li> > <li> > <label for="opacuserjs">Specific OPAC JS: </label> > <div style="display:flex; flex-direction:column;"> >@@ -305,7 +360,6 @@ > <a class="collapse-textarea" id="collapse_opacusercss" data-target="opacusercss" data-syntax="css" style="display:none" href="#">Collapse</br></a> > </div> > </li> >- </li> > </ol> > </fieldset> > <fieldset class="action"> >@@ -315,6 +369,24 @@ > </form> > [% END %] > >+[% BLOCK dayname %] >+ [% IF day == 0 %] >+ <span>Monday</span> >+ [% ELSIF day == 1 %] >+ <span>Tuesday</span> >+ [% ELSIF day == 2 %] >+ <span>Wednesday</span> >+ [% ELSIF day == 3 %] >+ <span>Thursday</span> >+ [% ELSIF day == 4 %] >+ <span>Friday</span> >+ [% ELSIF day == 5 %] >+ <span>Saturday</span> >+ [% ELSE %] >+ <span>Sunday</span> >+ [% END %] >+[% END %] >+ > [% IF op == 'delete_confirm' and not ( items_count or patrons_count )%] > <div class="dialog alert"> > <form action="/cgi-bin/koha/admin/branches.pl" method="post"> >-- >2.43.0
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
|
Splinter Review
Attachments on
bug 6796
:
124669
|
124670
|
124671
|
124672
|
134323
|
134324
|
134325
|
134326
|
134327
|
145669
|
145670
|
145671
|
145672
|
145673
|
146988
|
146989
|
146990
|
146991
|
146992
|
150442
|
150443
|
150444
|
150445
|
150446
|
150447
|
150448
|
150477
|
150478
|
153252
|
153253
|
153254
|
153255
|
153256
|
153257
|
153258
|
153259
|
153260
|
153261
|
153271
|
153272
|
153273
|
153274
|
153275
|
153276
|
153277
|
153278
|
153279
|
153280
|
156772
|
156773
|
156774
|
156775
|
156776
|
156777
|
156778
|
156779
|
156780
|
161970
|
161971
|
161972
|
161973
|
161974
|
161975
|
161976
|
161977
|
161978
|
161979
|
161980
|
161986
|
161987
|
161988
|
161989
|
162043
|
162044
|
162045
|
162046
|
162047
|
162048
|
162049
|
162050
|
162051
|
162052
|
162053
|
162054
|
162055
|
162056
|
162090
|
162091
|
162092
|
162093
|
162094
|
162095
|
162096
|
162097
|
162098
|
162099
|
162100
|
162101
|
162102
|
162103
|
162104
|
164511
|
164512
|
164513
|
164514
|
164515
|
164516
|
164517
|
164518
|
164538
|
164539
|
164540
|
164541
|
164542
|
164543
|
164544
|
164545
|
164546
|
164547
|
164548
|
164549
|
164550
|
164551
|
164552