From 1aa95453fcef3c27ab7daf3d7c6d22a90259cb34 Mon Sep 17 00:00:00 2001 From: Jonathan Druart Date: Mon, 24 Oct 2016 09:02:19 +0000 Subject: [PATCH] Bug 17453: Add exceptions This patch adds the ability to define patron categories not affected by the behavior of OPACHoldsIfAvailableAtPickup. The new pref OPACHoldsIfAvailableAtPickupExceptions get a list of patron categories (separated by pipes |). Signed-off-by: Nick Clemens https://bugs.koha-community.org/show_bug.cgi?id=14753 --- installer/data/mysql/atomicupdate/bug_17453.sql | 2 ++ installer/data/mysql/sysprefs.sql | 1 + .../prog/en/modules/admin/preferences/circulation.pref | 4 ++++ opac/opac-reserve.pl | 14 +++++++++++--- 4 files changed, 18 insertions(+), 3 deletions(-) diff --git a/installer/data/mysql/atomicupdate/bug_17453.sql b/installer/data/mysql/atomicupdate/bug_17453.sql index 9bac47a..576f7c4 100644 --- a/installer/data/mysql/atomicupdate/bug_17453.sql +++ b/installer/data/mysql/atomicupdate/bug_17453.sql @@ -1,2 +1,4 @@ INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type) VALUES ('OPACHoldsIfAvailableAtPickup','1','','Allow to pickup up holds at libraries where the item is available','YesNo'); +INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type) VALUES +('OPACHoldsIfAvailableAtPickupExceptions','','','List the patron categories not affected by OPACHoldsIfAvailableAtPickup if off','Free'); diff --git a/installer/data/mysql/sysprefs.sql b/installer/data/mysql/sysprefs.sql index 1ed530b..5ab4dd5 100644 --- a/installer/data/mysql/sysprefs.sql +++ b/installer/data/mysql/sysprefs.sql @@ -320,6 +320,7 @@ INSERT INTO systempreferences ( `variable`, `value`, `options`, `explanation`, ` ('OpacHighlightedWords','1','','If Set, then queried words are higlighted in OPAC','YesNo'), ('OPACHoldingsDefaultSortField','first_column','first_column|homebranch|holdingbranch','Default sort field for the holdings table at the OPAC','choice'), ('OPACHoldsIfAvailableAtPickup','1','','Allow to pickup up holds at libraries where the item is available','YesNo'), +('OPACHoldsIfAvailableAtPickupExceptions','','','List the patron categories not affected by OPACHoldsIfAvailableAtPickup if off','Free'), ('OpacHoldNotes','0','','Show hold notes on OPAC','YesNo'), ('OPACISBD','#100||{ 100a }{ 100b }{ 100c }{ 100d }{ 110a }{ 110b }{ 110c }{ 110d }{ 110e }{ 110f }{ 110g }{ 130a }{ 130d }{ 130f }{ 130g }{ 130h }{ 130k }{ 130l }{ 130m }{ 130n }{ 130o }{ 130p }{ 130r }{ 130s }{ 130t }|

\r\n#245||{ 245a }{ 245b }{245f }{ 245g }{ 245k }{ 245n }{ 245p }{ 245s }{ 245h }|\r\n#246||{ : 246i }{ 246a }{ 246b }{ 246f }{ 246g }{ 246n }{ 246p }{ 246h }|\r\n#242||{ = 242a }{ 242b }{ 242n }{ 242p }{ 242h }|\r\n#245||{ 245c }|\r\n#242||{ = 242c }|\r\n#250| - |{ 250a }{ 250b }|\r\n#254|, |{ 254a }|\r\n#255|, |{ 255a }{ 255b }{ 255c }{ 255d }{ 255e }{ 255f }{ 255g }|\r\n#256|, |{ 256a }|\r\n#257|, |{ 257a }|\r\n#258|, |{ 258a }{ 258b }|\r\n#260| - |{ 260a }{ 260b }{ 260c }|\r\n#300| - |{ 300a }{ 300b }{ 300c }{ 300d }{ 300e }{ 300f }{ 300g }|\r\n#306| - |{ 306a }|\r\n#307| - |{ 307a }{ 307b }|\r\n#310| - |{ 310a }{ 310b }|\r\n#321| - |{ 321a }{ 321b }|\r\n#340| - |{ 3403 }{ 340a }{ 340b }{ 340c }{ 340d }{ 340e }{ 340f }{ 340h }{ 340i }|\r\n#342| - |{ 342a }{ 342b }{ 342c }{ 342d }{ 342e }{ 342f }{ 342g }{ 342h }{ 342i }{ 342j }{ 342k }{ 342l }{ 342m }{ 342n }{ 342o }{ 342p }{ 342q }{ 342r }{ 342s }{ 342t }{ 342u }{ 342v }{ 342w }|\r\n#343| - |{ 343a }{ 343b }{ 343c }{ 343d }{ 343e }{ 343f }{ 343g }{ 343h }{ 343i }|\r\n#351| - |{ 3513 }{ 351a }{ 351b }{ 351c }|\r\n#352| - |{ 352a }{ 352b }{ 352c }{ 352d }{ 352e }{ 352f }{ 352g }{ 352i }{ 352q }|\r\n#362| - |{ 362a }{ 351z }|\r\n#440| - |{ 440a }{ 440n }{ 440p }{ 440v }{ 440x }|.\r\n#490| - |{ 490a }{ 490v }{ 490x }|.\r\n#800| - |{ 800a }{ 800b }{ 800c }{ 800d }{ 800e }{ 800f }{ 800g }{ 800h }{ 800j }{ 800k }{ 800l }{ 800m }{ 800n }{ 800o }{ 800p }{ 800q }{ 800r }{ 800s }{ 800t }{ 800u }{ 800v }|.\r\n#810| - |{ 810a }{ 810b }{ 810c }{ 810d }{ 810e }{ 810f }{ 810g }{ 810h }{ 810k }{ 810l }{ 810m }{ 810n }{ 810o }{ 810p }{ 810r }{ 810s }{ 810t }{ 810u }{ 810v }|.\r\n#811| - |{ 811a }{ 811c }{ 811d }{ 811e }{ 811f }{ 811g }{ 811h }{ 811k }{ 811l }{ 811n }{ 811p }{ 811q }{ 811s }{ 811t }{ 811u }{ 811v }|.\r\n#830| - |{ 830a }{ 830d }{ 830f }{ 830g }{ 830h }{ 830k }{ 830l }{ 830m }{ 830n }{ 830o }{ 830p }{ 830r }{ 830s }{ 830t }{ 830v }|.\r\n#500|

|{ 5003 }{ 500a }|\r\n#501|

|{ 501a }|\r\n#502|

|{ 502a }|\r\n#504|

|{ 504a }|\r\n#505|

|{ 505a }{ 505t }{ 505r }{ 505g }{ 505u }|\r\n#506|

|{ 5063 }{ 506a }{ 506b }{ 506c }{ 506d }{ 506u }|\r\n#507|

|{ 507a }{ 507b }|\r\n#508|

|{ 508a }{ 508a }|\r\n#510|

|{ 5103 }{ 510a }{ 510x }{ 510c }{ 510b }|\r\n#511|

|{ 511a }|\r\n#513|

|{ 513a }{513b }|\r\n#514|

|{ 514z }{ 514a }{ 514b }{ 514c }{ 514d }{ 514e }{ 514f }{ 514g }{ 514h }{ 514i }{ 514j }{ 514k }{ 514m }{ 514u }|\r\n#515|

|{ 515a }|\r\n#516|

|{ 516a }|\r\n#518|

|{ 5183 }{ 518a }|\r\n#520|

|{ 5203 }{ 520a }{ 520b }{ 520u }|\r\n#521|

|{ 5213 }{ 521a }{ 521b }|\r\n#522|

|{ 522a }|\r\n#524|

|{ 524a }|\r\n#525|

|{ 525a }|\r\n#526|

|{\\n510i }{\\n510a }{ 510b }{ 510c }{ 510d }{\\n510x }|\r\n#530|

|{\\n5063 }{\\n506a }{ 506b }{ 506c }{ 506d }{\\n506u }|\r\n#533|

|{\\n5333 }{\\n533a }{\\n533b }{\\n533c }{\\n533d }{\\n533e }{\\n533f }{\\n533m }{\\n533n }|\r\n#534|

|{\\n533p }{\\n533a }{\\n533b }{\\n533c }{\\n533d }{\\n533e }{\\n533f }{\\n533m }{\\n533n }{\\n533t }{\\n533x }{\\n533z }|\r\n#535|

|{\\n5353 }{\\n535a }{\\n535b }{\\n535c }{\\n535d }|\r\n#538|

|{\\n5383 }{\\n538a }{\\n538i }{\\n538u }|\r\n#540|

|{\\n5403 }{\\n540a }{ 540b }{ 540c }{ 540d }{\\n520u }|\r\n#544|

|{\\n5443 }{\\n544a }{\\n544b }{\\n544c }{\\n544d }{\\n544e }{\\n544n }|\r\n#545|

|{\\n545a }{ 545b }{\\n545u }|\r\n#546|

|{\\n5463 }{\\n546a }{ 546b }|\r\n#547|

|{\\n547a }|\r\n#550|

|{ 550a }|\r\n#552|

|{ 552z }{ 552a }{ 552b }{ 552c }{ 552d }{ 552e }{ 552f }{ 552g }{ 552h }{ 552i }{ 552j }{ 552k }{ 552l }{ 552m }{ 552n }{ 562o }{ 552p }{ 552u }|\r\n#555|

|{ 5553 }{ 555a }{ 555b }{ 555c }{ 555d }{ 555u }|\r\n#556|

|{ 556a }{ 506z }|\r\n#563|

|{ 5633 }{ 563a }{ 563u }|\r\n#565|

|{ 5653 }{ 565a }{ 565b }{ 565c }{ 565d }{ 565e }|\r\n#567|

|{ 567a }|\r\n#580|

|{ 580a }|\r\n#581|

|{ 5633 }{ 581a }{ 581z }|\r\n#584|

|{ 5843 }{ 584a }{ 584b }|\r\n#585|

|{ 5853 }{ 585a }|\r\n#586|

|{ 5863 }{ 586a }|\r\n#020|

|{ 020a }{ 020c }|\r\n#022|

|{ 022a }|\r\n#222| = |{ 222a }{ 222b }|\r\n#210| = |{ 210a }{ 210b }|\r\n#024|

|{ 024a }{ 024c }{ 024d }{ 0242 }|\r\n#027|

|{ 027a }|\r\n#028|

|{ 028a }{ 028b }|\r\n#013|

|{ 013a }{ 013b }{ 013c }{ 013d }{ 013e }{ 013f }|\r\n#030|

|{ 030a }|\r\n#037|

|{ 037a }{ 037b }{ 037c }{ 037f }{ 037g }{ 037n }|\r\n#010|

|{ 010a }|\r\n#015|

|{ 015a }{ 0152 }|\r\n#016|

|{ 016a }{ 0162 }|\r\n#600|

|{\\n6003 }{\\n600a}{ 600b }{ 600c }{ 600d }{ 600e }{ 600f }{ 600g }{ 600h }{--600k}{ 600l }{ 600m }{ 600n }{ 600o }{--600p}{ 600r }{ 600s }{ 600t }{ 600u }{--600x}{--600z}{--600y}{--600v}|\r\n#610|

|{\\n6103 }{\\n610a}{ 610b }{ 610c }{ 610d }{ 610e }{ 610f }{ 610g }{ 610h }{--610k}{ 610l }{ 610m }{ 610n }{ 610o }{--610p}{ 610r }{ 610s }{ 610t }{ 610u }{--610x}{--610z}{--610y}{--610v}|\r\n#611|

|{\\n6113 }{\\n611a}{ 611b }{ 611c }{ 611d }{ 611e }{ 611f }{ 611g }{ 611h }{--611k}{ 611l }{ 611m }{ 611n }{ 611o }{--611p}{ 611r }{ 611s }{ 611t }{ 611u }{--611x}{--611z}{--611y}{--611v}|\r\n#630|

|{\\n630a}{ 630b }{ 630c }{ 630d }{ 630e }{ 630f }{ 630g }{ 630h }{--630k }{ 630l }{ 630m }{ 630n }{ 630o }{--630p}{ 630r }{ 630s }{ 630t }{--630x}{--630z}{--630y}{--630v}|\r\n#648|

|{\\n6483 }{\\n648a }{--648x}{--648z}{--648y}{--648v}|\r\n#650|

|{\\n6503 }{\\n650a}{ 650b }{ 650c }{ 650d }{ 650e }{--650x}{--650z}{--650y}{--650v}|\r\n#651|

|{\\n6513 }{\\n651a}{ 651b }{ 651c }{ 651d }{ 651e }{--651x}{--651z}{--651y}{--651v}|\r\n#653|

|{ 653a }|\r\n#654|

|{\\n6543 }{\\n654a}{--654b}{--654x}{--654z}{--654y}{--654v}|\r\n#655|

|{\\n6553 }{\\n655a}{--655b}{--655x }{--655z}{--655y}{--655v}|\r\n#656|

|{\\n6563 }{\\n656a}{--656k}{--656x}{--656z}{--656y}{--656v}|\r\n#657|

|{\\n6573 }{\\n657a}{--657x}{--657z}{--657y}{--657v}|\r\n#658|

|{\\n658a}{--658b}{--658c}{--658d}{--658v}|\r\n#050|

|{ 050a }{ / 050b }|\r\n#082|

|{ 082a }{ / 082b }|\r\n#080|

|{ 080a }{ 080x }{ / 080b }|\r\n#070|

|{ 070a }{ / 070b }|\r\n#060|

|{ 060a }{ / 060b }|\r\n#074|

|{ 074a }|\r\n#086|

|{ 086a }|\r\n#088|

|{ 088a }|','70|10','OPAC ISBD','Textarea'), ('OpacItemLocation','callnum','callnum|ccode|location','Show the shelving location of items in the opac','Choice'), 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 8810efb..dfbcd8d 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 @@ -653,6 +653,10 @@ Circulation: yes: Allow no: "Don't allow" - to pickup up holds at libraries where the item is available. + - + - "Patron categories not affected by OPACHoldsIfAvailableAtPickup" + - pref: OPACHoldsIfAvailableAtPickupExceptions + - "(list of patron categories separated with a pipe '|')" Fines Policy: - - Calculate fines based on days overdue diff --git a/opac/opac-reserve.pl b/opac/opac-reserve.pl index 1ba5ab3..5b28b27 100755 --- a/opac/opac-reserve.pl +++ b/opac/opac-reserve.pl @@ -73,6 +73,14 @@ sub get_out { my ( $borr ) = GetMember( borrowernumber => $borrowernumber ); my $patron = Koha::Patrons->find( $borrowernumber ); +my $can_place_hold_if_available_at_pickup = C4::Context->preference('OPACHoldsIfAvailableAtPickup'); +unless ( $can_place_hold_if_available_at_pickup ) { + my @patron_categories = split '\|', C4::Context->preference('OPACHoldsIfAvailableAtPickupExceptions'); + if ( @patron_categories ) { + $can_place_hold_if_available_at_pickup = grep /$borr->{categorycode}/, @patron_categories; + } +} + # check if this user can place a reserve, -1 means use sys pref, 0 means dont block, 1 means block if ( $patron->category->effective_BlockExpiredPatronOpacActions ) { @@ -278,7 +286,7 @@ if ( $query->param('place_reserve') ) { $canreserve = 0; } - unless ( C4::Context->preference('OPACHoldsIfAvailableAtPickup') ) { + unless ( $can_place_hold_if_available_at_pickup ) { $canreserve = 0 if Koha::Items->search({ biblionumber => $biblioNum, holdingbranch => $branch })->count; } @@ -526,7 +534,7 @@ foreach my $biblioNum (@biblionumbers) { } $numCopiesAvailable++; - if ( not C4::Context->preference('OPACHoldsIfAvailableAtPickup') ) { + unless ( $can_place_hold_if_available_at_pickup ) { push @not_available_at, $itemInfo->{holdingbranch}; } } @@ -562,7 +570,7 @@ foreach my $biblioNum (@biblionumbers) { $biblioLoopIter{not_available_at} = \@not_available_at ; } - unless ( C4::Context->preference('OPACHoldsIfAvailableAtPickup') ) { + unless ( $can_place_hold_if_available_at_pickup ) { @not_available_at = uniq @not_available_at; $biblioLoopIter{not_available_at} = \@not_available_at ; # The record is not holdable is not available at any of the libraries -- 2.1.4