From 05822803b9294e743ec1f89b2cb9410c67423cc1 Mon Sep 17 00:00:00 2001 From: Thibaud Guillot Date: Thu, 25 Jan 2024 14:14:07 +0100 Subject: [PATCH] Bug 35906: Add bookable option on itemtype Actually new "booking" feature can be set on an item but no directly on an itemtype. This patch adds this possibility. Test plan: 1) Test this new feature on an item as it were currently working. 2) Apply this patch 3) Run updatedatabase.pl 4) Reload Schema by running update_dbix_class_files.pl 5) Edit an itemtype, there is a new checkbox to add 'bookable' option 6) Test it with item with this itemtype, go to edit item view ("Booking" tab is already in biblio-view-menu even if there is no booking on item, due to bookable option on itemtype) 7) Next to the bookable item option you can see a warn with a message if both options (item/itemtype) are not the same. 8) Test it Sponsored by: BibLibre --- Koha/Template/Plugin/Biblio.pm | 6 +++++- admin/itemtypes.pl | 3 +++ .../Bug_35906_add-column-bookable-itemtype.pl | 14 ++++++++++++++ installer/data/mysql/kohastructure.sql | 1 + .../prog/en/modules/admin/itemtypes.tt | 9 +++++++++ .../prog/en/modules/catalogue/moredetail.tt | 8 ++++++-- 6 files changed, 38 insertions(+), 3 deletions(-) create mode 100644 installer/data/mysql/atomicupdate/Bug_35906_add-column-bookable-itemtype.pl diff --git a/Koha/Template/Plugin/Biblio.pm b/Koha/Template/Plugin/Biblio.pm index 79c7284..92146fd 100644 --- a/Koha/Template/Plugin/Biblio.pm +++ b/Koha/Template/Plugin/Biblio.pm @@ -73,7 +73,11 @@ sub CanBook { my $biblio = Koha::Biblios->find($biblionumber); return 0 unless $biblio; - return $biblio->bookable_items->count ? 1 : 0; + my $biblio_itemtype = Koha::ItemTypes->find($biblio->itemtype); + my $bookable_itemtype = $biblio_itemtype->bookable; + + return 1 if $bookable_itemtype || $biblio->bookable_items->count; + return 0; } sub BookingsCount { diff --git a/admin/itemtypes.pl b/admin/itemtypes.pl index 44e9ad5..ed13f33 100755 --- a/admin/itemtypes.pl +++ b/admin/itemtypes.pl @@ -98,6 +98,7 @@ if ( $op eq 'add_form' ) { my $rentalcharge_daily_calendar = $input->param('rentalcharge_daily_calendar') // 0; my $rentalcharge_hourly_calendar = $input->param('rentalcharge_hourly_calendar') // 0; my $automatic_checkin = $input->param('automatic_checkin') // 0; + my $bookable = $input->param('bookable')// 0; if ( $itemtype and $is_a_modif ) { # it's a modification $itemtype->description($description); @@ -118,6 +119,7 @@ if ( $op eq 'add_form' ) { $itemtype->rentalcharge_daily_calendar($rentalcharge_daily_calendar); $itemtype->rentalcharge_hourly_calendar($rentalcharge_hourly_calendar); $itemtype->automatic_checkin($automatic_checkin); + $itemtype->bookable($bookable); eval { $itemtype->store; @@ -151,6 +153,7 @@ if ( $op eq 'add_form' ) { rentalcharge_daily_calendar => $rentalcharge_daily_calendar, rentalcharge_hourly_calendar => $rentalcharge_hourly_calendar, automatic_checkin => $automatic_checkin, + bookable => $bookable, } ); eval { diff --git a/installer/data/mysql/atomicupdate/Bug_35906_add-column-bookable-itemtype.pl b/installer/data/mysql/atomicupdate/Bug_35906_add-column-bookable-itemtype.pl new file mode 100644 index 0000000..8058965 --- /dev/null +++ b/installer/data/mysql/atomicupdate/Bug_35906_add-column-bookable-itemtype.pl @@ -0,0 +1,14 @@ +use Modern::Perl; + +return { + bug_number => "35906", + description => "Add bookable column on itemtypes table", + up => sub { + my ($args) = @_; + my ( $dbh, $out ) = @$args{qw(dbh out)}; + + $dbh->do('ALTER TABLE itemtypes ADD IF NOT EXISTS bookable INT(1) DEFAULT 0'); + + say $out "Added column 'itemtypes.bookable'"; + }, +}; diff --git a/installer/data/mysql/kohastructure.sql b/installer/data/mysql/kohastructure.sql index 16310f0..dd2a610 100644 --- a/installer/data/mysql/kohastructure.sql +++ b/installer/data/mysql/kohastructure.sql @@ -4123,6 +4123,7 @@ CREATE TABLE `itemtypes` ( `hideinopac` tinyint(1) NOT NULL DEFAULT 0 COMMENT 'Hide the item type from the search options in OPAC', `searchcategory` varchar(80) DEFAULT NULL COMMENT 'Group this item type with others with the same value on OPAC search options', `automatic_checkin` tinyint(1) NOT NULL DEFAULT 0 COMMENT 'If automatic checkin is enabled for items of this type', + `bookable` tinyint(1) NOT NULL DEFAULT 0 COMMENT 'Activate bookable feature for items related to this item type', PRIMARY KEY (`itemtype`), UNIQUE KEY `itemtype` (`itemtype`), KEY `itemtypes_ibfk_1` (`parent_type`), diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/itemtypes.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/itemtypes.tt index 97f463c..6a17f74 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/itemtypes.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/itemtypes.tt @@ -256,6 +256,15 @@ [% END %] If checked, items will be automatically checked in once they've reached their due date. This feature requires the misc/cronjobs/automatic_checkin.pl cronjob. Ask your system administrator to schedule it. +
  • + + [% IF itemtype.bookable %] + + [% ELSE %] + + [% END %] + If checked, items related to this item type will benefit from the "booking" feature. +
  • diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/moredetail.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/moredetail.tt index ad31298..5a8384f 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/moredetail.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/moredetail.tt @@ -346,7 +346,11 @@
  • - Bookable: + [% SET itemtype_bookable_status = ITEM_DAT.effective_itemtype.bookable == 1 ? "bookable" : "not bookable" %] + + Bookable: + [% IF ITEM_DAT.bookable != ITEM_DAT.effective_itemtype.bookable %][% END %] + [% IF ( CAN_user_circulate ) %]
    @@ -365,7 +369,7 @@
    [% ELSE %] - [% IF ITEM_DAT.bookable == 1 %] Yes [% ELSE %] No [% END %] + [% IF ITEM_DAT.bookable == 1 || ITEM_DAT.effective_itemtype.bookable == 1 %] Yes [% ELSE %] No [% END %] [% END %]
  • -- 2.30.2