Bugzilla – Attachment 163547 Details for
Bug 35906
Add bookable option on itemtypes
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
Bug 35906: Add bookable option on itemtype
Bug-35906-Add-bookable-option-on-itemtype.patch (text/plain), 12.30 KB, created by
Thibaud Guillot (thibaud_g)
on 2024-03-20 14:54:19 UTC
(
hide
)
Description:
Bug 35906: Add bookable option on itemtype
Filename:
MIME Type:
Creator:
Thibaud Guillot (thibaud_g)
Created:
2024-03-20 14:54:19 UTC
Size:
12.30 KB
patch
obsolete
>From e833a34d452909b71fc7c843fbb08cda5f631332 Mon Sep 17 00:00:00 2001 >From: Thibaud Guillot <thibaud.guillot@biblibre.com> >Date: Thu, 25 Jan 2024 14:14:07 +0100 >Subject: [PATCH] Bug 35906: Add bookable option on itemtype >MIME-Version: 1.0 >Content-Type: text/plain; charset=UTF-8 >Content-Transfer-Encoding: 8bit > >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, if there is 1 item at least you > will see 'Booking' tab. >7) You now have a new setting on the item bookable option to 'Follow > itemtype" > >Sponsored by: Association de Gestion des Ã…uvres Sociales d'Inria (AGOS) >--- > Koha/ItemType.pm | 1 + > Koha/Items.pm | 5 ++++- > Koha/REST/V1/Biblios.pm | 3 +++ > admin/itemtypes.pl | 3 +++ > .../Bug_35906_add-column-bookable-itemtype.pl | 21 +++++++++++++++++++ > installer/data/mysql/kohastructure.sql | 1 + > installer/data/mysql/mandatory/sysprefs.sql | 1 + > .../prog/en/modules/admin/itemtypes.tt | 11 ++++++++++ > .../admin/preferences/circulation.pref | 7 +++++++ > .../prog/en/modules/catalogue/moredetail.tt | 8 ++++--- > 10 files changed, 57 insertions(+), 4 deletions(-) > create mode 100644 installer/data/mysql/atomicupdate/Bug_35906_add-column-bookable-itemtype.pl > >diff --git a/Koha/ItemType.pm b/Koha/ItemType.pm >index fb88518c257..f4c0c4aee98 100644 >--- a/Koha/ItemType.pm >+++ b/Koha/ItemType.pm >@@ -234,6 +234,7 @@ sub to_api_mapping { > rentalcharge_daily_calendar => 'daily_rental_charge_calendar', > rentalcharge_hourly => 'hourly_rental_charge', > rentalcharge_hourly_calendar => 'hourly_rental_charge_calendar', >+ bookable_itemtype => 'bookable_itemtype', > }; > } > >diff --git a/Koha/Items.pm b/Koha/Items.pm >index 4089068b34d..aa89d87d9ac 100644 >--- a/Koha/Items.pm >+++ b/Koha/Items.pm >@@ -169,7 +169,10 @@ Returns a new resultset, containing only those items that are allowed to be book > sub filter_by_bookable { > my ($self) = @_; > >- my $params = { bookable => 1 }; >+ my $params = >+ C4::Context->preference('item-level_booking') == 1 >+ ? { bookable => 1 } >+ : { itype => { -in => \'SELECT itemtype FROM itemtypes WHERE bookable = 1' } }; > > return $self->search($params); > } >diff --git a/Koha/REST/V1/Biblios.pm b/Koha/REST/V1/Biblios.pm >index 0f66754f830..1bd448919c6 100644 >--- a/Koha/REST/V1/Biblios.pm >+++ b/Koha/REST/V1/Biblios.pm >@@ -291,6 +291,9 @@ sub get_items { > my $biblio = Koha::Biblios->find( { biblionumber => $c->param('biblio_id') }, { prefetch => ['items'] } ); > my $bookable_only = $c->param('bookable'); > >+ # Deletion of parameter to avoid filtering on the items table in the case of bookings on 'itemtype' >+ $c->req->params->remove('bookable'); >+ > unless ($biblio) { > return $c->render( > status => 404, >diff --git a/admin/itemtypes.pl b/admin/itemtypes.pl >index 684f9377dbc..b5dbc7c98c6 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 00000000000..642505fd2fd >--- /dev/null >+++ b/installer/data/mysql/atomicupdate/Bug_35906_add-column-bookable-itemtype.pl >@@ -0,0 +1,21 @@ >+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(q{ >+ INSERT IGNORE INTO systempreferences (`variable`, `value`, `options`, `explanation`, `type`) VALUES ('item-level_booking', 1, '', 'enables item type level for future booking', 'YesNo'); >+ }); >+ >+ $dbh->do(q{ >+ ALTER TABLE itemtypes ADD IF NOT EXISTS bookable INT(1) DEFAULT 0 >+ }); >+ >+ say $out "Added new system preference 'item-level_booking'"; >+ say $out "Added column 'itemtypes.bookable'"; >+ }, >+}; >diff --git a/installer/data/mysql/kohastructure.sql b/installer/data/mysql/kohastructure.sql >index 16310f0f449..dd2a6107005 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/installer/data/mysql/mandatory/sysprefs.sql b/installer/data/mysql/mandatory/sysprefs.sql >index 669074aa506..9e96d47ba64 100644 >--- a/installer/data/mysql/mandatory/sysprefs.sql >+++ b/installer/data/mysql/mandatory/sysprefs.sql >@@ -345,6 +345,7 @@ INSERT INTO systempreferences ( `variable`, `value`, `options`, `explanation`, ` > ('IssueLostItem','alert','Defines what should be done when an attempt is made to issue an item that has been marked as lost.','alert|confirm|nothing','Choice'), > ('IssuingInProcess','0',NULL,'If ON, disables fines if the patron is issuing item that accumulate debt','YesNo'), > ('item-level_itypes','1','','If ON, enables Item-level Itemtype / Issuing Rules','YesNo'), >+('item-level_booking','1','','If ON, enables Item-level for future booking feature','YesNo'), > ('itemBarcodeFallbackSearch','0',NULL,'If set, uses scanned item barcodes as a catalogue search if not found as barcodes','YesNo'), > ('itemBarcodeInputFilter','','whitespace|T-prefix|cuecat|libsuite8|EAN13','If set, allows specification of a item barcode input filter','Choice'), > ('itemcallnumber','',NULL,'The MARC field/subfield that is used to calculate the itemcallnumber (Dewey would be 082ab or 092ab; LOC would be 050ab or 090ab) could be 852hi from an item record','free'), >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 b9ea060e304..d93cee3b87f 100644 >--- a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/itemtypes.tt >+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/itemtypes.tt >@@ -258,6 +258,17 @@ > [% END %] > <span class="hint">If checked, items will be automatically checked in once they've reached their due date. This feature requires the <code>misc/cronjobs/automatic_checkin.pl</code> cronjob. Ask your system administrator to schedule it.</span> > </li> >+ [% IF Koha.Preference('item-level_booking') == 0 %] >+ <li> >+ <label for="bookable">Bookable: </label> >+ [% IF itemtype.bookable %] >+ <input type="checkbox" id="bookable" name="bookable" checked="checked" value="1" /> >+ [% ELSE %] >+ <input type="checkbox" id="bookable" name="bookable" value="1" /> >+ [% END %] >+ <span class="hint">If checked, all items of this type will be enabled for future bookings.</span> >+ </li> >+ [% END %] > <li> > <label for="rentalcharge">Rental charge: </label> > <input type="text" id="rentalcharge" name="rentalcharge" size="10" value="[% itemtype.rentalcharge | $Price on_editing => 1 %]" min="0" /> >diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/circulation.pref b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/circulation.pref >index bae185a1f5c..487281dc92c 100644 >--- a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/circulation.pref >+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/circulation.pref >@@ -1008,6 +1008,13 @@ Circulation: > 0: "Don't allow" > - holds to be automatically filled after being automatically checked in. > - '<br><strong>NOTE:</strong> This system preference requires the <code>misc/cronjobs/automatic_checkin.pl</code> cronjob. Ask your system administrator to schedule it.' >+ - >+ - Use the type of the >+ - pref: item-level_booking >+ choices: >+ 1: item >+ 0: itemtype >+ - level to defined witch items can be bookable in future. > Patron restrictions: > - > - pref: PatronRestrictionTypes >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 a00db538ac0..f6a45d0f2a4 100644 >--- a/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/moredetail.tt >+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/moredetail.tt >@@ -351,15 +351,17 @@ > </form> > </li> > <li> >- <span class="label">Bookable:</span> >+ <span class="label"> >+ Bookable: >+ </span> > [% IF ( CAN_user_circulate ) %] > <form action="updateitem.pl" method="post"> > [% INCLUDE 'csrf-token.inc' %] > <input type="hidden" name="biblionumber" value="[% ITEM_DAT.biblionumber | html %]" /> > <input type="hidden" name="biblioitemnumber" value="[% ITEM_DAT.biblioitemnumber | html %]" /> > <input type="hidden" name="itemnumber" value="[% ITEM_DAT.itemnumber | html %]" /> >- <select name="bookable"> >- [% IF ITEM_DAT.bookable == 1 %] >+ <select name="bookable" [% IF ITEM_DAT.effective_itemtype.bookable == 1 && Koha.Preference('item-level_booking') == 0 %]disabled[% END %]> >+ [% IF ITEM_DAT.bookable == 1 || ITEM_DAT.effective_itemtype.bookable == 1 %] > <option value="1" selected="selected">Yes</option> > <option value="0">No</option> > [% ELSE %] >-- >2.30.2
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 35906
:
161397
|
161638
|
161744
|
161961
|
162242
|
162365
|
162465
|
162466
|
162467
|
162468
|
162469
|
162470
|
162472
|
163291
|
163292
|
163293
|
163294
|
163295
|
163547
|
163548
|
163549
|
163550
|
163551
|
164579
|
164580
|
164581
|
164582
|
164583
|
164584
|
164585
|
165437
|
166866
|
166867
|
166868
|
166869
|
166870
|
166871
|
168120
|
168121
|
168122
|
168160
|
168161
|
168162
|
168163
|
168164
|
170187
|
170188
|
170189
|
170190
|
170191
|
170582
|
170583
|
170584
|
170585
|
170586
|
172127
|
172128
|
172129
|
172130
|
172131
|
172132
|
172941
|
172945
|
172950
|
172951
|
172952
|
172953
|
172954
|
172955
|
172956
|
172957
|
172958
|
172959
|
172960
|
172961
|
173324
|
173325
|
173326
|
173327
|
173328
|
173329
|
173330
|
173331
|
173332
|
173333
|
173334
|
173335
|
173893