From daf7e166156188d2db74dc0e829d4d4420ed89bc Mon Sep 17 00:00:00 2001 From: Alex Buckley Date: Sat, 22 Sep 2018 15:46:37 +0000 Subject: [PATCH] Bug 8367: Template fixes + fixes to C4/Reserves.pm and Koha/Hold.pm Fixed waitingreserves.tt template so the borrowernumber is successfully passed to waitingreserves.pl upon cancelling a hold, so users can now successfully cancel holds from the waitingreserves.pl interface. Removed check for ReserveMaxPickupdateDelay in Koha/Hold.pm as this syspref is removed in the previous patch. Instead the expirationdate is calculated the same way as the lastpickupdatedate that is retrieving the holdpickupwait value for the appropriate issuingrule and then adding that onto the waiting date. Same test plan as main patch Sponsored-By: Brimbank Library, Australia --- C4/Circulation.pm | 4 +- C4/Letters.pm | 18 +-- C4/Reserves.pm | 134 +++++++++++++++++++-- Koha/Hold.pm | 32 ++++- Koha/IssuingRules.pm | 2 +- admin/smart-rules.pl | 1 + circ/returns.pl | 1 + circ/waitingreserves.pl | 53 ++++---- .../prog/en/modules/admin/smart-rules.tt | 1 + .../prog/en/modules/circ/waitingreserves.tt | 4 +- .../prog/en/modules/help/admin/smart-rules.tt | 32 ++--- .../prog/en/modules/members/moremember.tt | 1 + koha-tmpl/intranet-tmpl/prog/js/holds.js | 3 + 13 files changed, 217 insertions(+), 69 deletions(-) diff --git a/C4/Circulation.pm b/C4/Circulation.pm index 9c8d5ba..dc785a7 100644 --- a/C4/Circulation.pm +++ b/C4/Circulation.pm @@ -1962,7 +1962,6 @@ sub AddReturn { } else { ShelfToCart( $item->{'itemnumber'} ) if ( C4::Context->preference("ReturnToShelvingCart") ); } - # fix up the accounts..... if ( $item->{'itemlost'} ) { $messages->{'WasLost'} = 1; @@ -2020,8 +2019,9 @@ sub AddReturn { my $lookahead= C4::Context->preference('ConfirmFutureHolds'); #number of days to look for future holds ($resfound, $resrec, undef) = C4::Reserves::CheckReserves( $item->{'itemnumber'}, undef, $lookahead ) unless ( $item->{'withdrawn'} ); if ($resfound) { - $resrec->{'ResFound'} = $resfound; + $resrec->{'ResFound'} = $resfound; $messages->{'ResFound'} = $resrec; + C4::Reserves::ModReserveStatus($item->{'itemnumber'}, 'W'); } # Record the fact that this book was returned. diff --git a/C4/Letters.pm b/C4/Letters.pm index 4954067..070c31a 100644 --- a/C4/Letters.pm +++ b/C4/Letters.pm @@ -781,15 +781,15 @@ sub _parseletter { # Work on a local copy of $values_in (passed by reference) to avoid side effects # in callers ( by changing / formatting values ) - my $values = $values_in ? { %$values_in } : {}; + my $values = $values_in ? { %$values_in } : {}; - if ( $table eq 'borrowers' && $values->{'dateexpiry'} ){ - $values->{'dateexpiry'} = output_pref({ str => $values->{dateexpiry}, dateonly => 1 }); - } + if ( $table eq 'borrowers' && $values->{'dateexpiry'} ){ + $values->{'dateexpiry'} = output_pref({ str => $values->{dateexpiry}, dateonly => 1 }); + } - if ( $table eq 'reserves' && $values->{'waitingdate'} ) { - $values->{'waitingdate'} = output_pref({ dt => dt_from_string( $values->{'waitingdate'} ), dateonly => 1 }); - } +# if ( $table eq 'reserves' && $values->{'waitingdate'}) { +# $values->{'waitingdate'} = output_pref({ dt => dt_from_string( $values->{'waitingdate'} ), dateonly => 1 }); +# } if ($letter->{content} && $letter->{content} =~ /<>/) { my $todaysdate = output_pref( DateTime->now() ); @@ -806,7 +806,9 @@ sub _parseletter { my $av = Koha::AuthorisedValues->search({ category => 'ROADTYPE', authorised_value => $val }); $val = $av->count ? $av->next->lib : ''; } - +warn $table; +warn $field; +warn $val; # Dates replacement my $replacedby = defined ($val) ? $val : ''; if ( $replacedby diff --git a/C4/Reserves.pm b/C4/Reserves.pm index 30a5f53..35a455d 100644 --- a/C4/Reserves.pm +++ b/C4/Reserves.pm @@ -121,7 +121,6 @@ BEGIN { &CanItemBeReserved &CanReserveBeCanceledFromOpac &CancelExpiredReserves - &AutoUnsuspendReserves &IsAvailableForItemLevelRequest @@ -195,12 +194,11 @@ sub AddReserve { #The reserve-object doesn't exist yet in DB, so we must supply what information we have to GetLastPickupDate() so it can do it's work. my $reserve = {borrowernumber => $borrowernumber, waitingdate => $waitingdate, branchcode => $branch}; - $lastpickupdate = GetLastPickupDate( $reserve, $item ); + my $patron = Koha::Patrons->find( {borrowernumber => $borrowernumber} ); + $lastpickupdate = GetLastPickupDate( $reserve, $item, $patron ); } - # Don't add itemtype limit if specific item is selected $itemtype = undef if $checkitem; - # updates take place here my $hold = Koha::Hold->new( { @@ -219,7 +217,6 @@ sub AddReserve { } )->store(); $hold->set_waiting() if $found eq 'W'; - logaction( 'HOLDS', 'CREATE', $hold->id, Dumper($hold->unblessed) ) if C4::Context->preference('HoldsLog'); @@ -647,6 +644,104 @@ sub GetReserveStatus { return ''; # empty string here will remove need for checking undef, or less log lines } + +=head2 GetLastPickupDate + + my $lastpickupdate = GetLastPickupDate($reserve, $item); + my $lastpickupdate = GetLastPickupDate($reserve, $item, $borrower); + my $lastpickupdate = GetLastPickupDate(undef, $item); + + Gets the last pickup date from the issuingrules for the given reserves-row and sets the + $reserve->{lastpickupdate}.-value. + + If the reserves-row is not passed, function tries to figure it out from the item-row. + Calculating the last pickup date respects Calendar holidays and skips to the next open day. + If the issuingrule's holdspickupwait is 0 or less, means that the lastpickupdate-feature + is disabled for this kind of material. + + @PARAM1 koha.reserves-row + @PARAM2 koha.items-row, If the reserve is not given, an item must be given to be + able to find a reservation + @PARAM3 koha.borrowers-row, OPTIONAL + RETURNS DateTime, depicting the last pickup date. + OR undef if there is an error or if the issuingrules disable this feature for this material. + +=cut + +sub GetLastPickupDate { + my ($reserve, $item, $borrower) = @_; + ##Verify parameters + if ( not defined $reserve and not defined $item ) { + warn "C4::Reserves::GetMaxPickupDate(), is called without a reserve and an item"; + return; + } + if ( defined $reserve and not defined $item ) { + $item = C4::Items::GetItem( $reserve->{itemnumber} ); + } + + unless ( defined $borrower) { + my $borrower = Koha::Patrons->find( $reserve->{borrowernumber} ); + $borrower = $borrower->unblessed; + } + + unless ( defined $reserve ) { + my $reserve = GetReservesFromItemnumber( $item->{itemnumber} ); + } + my $date = $reserve->{waitingdate}; + unless ( $date ) { #It is possible that a reserve is just caught and it doesn't have a waitingdate yet. + $date = DateTime->now( time_zone => C4::Context->tz() ); #So default to NOW() + } + else { + $date = (ref $reserve->{waitingdate} eq 'DateTime') ? $reserve->{waitingdate} : dt_from_string($reserve->{waitingdate}); + } + ##Get churning the LastPickupDate + + # Get the controlbranch + my $controlbranch = GetReservesControlBranch( $item, $borrower ); + my $hbr = C4::Context->preference('HomeOrHoldingBranch') || "homebranch"; + my $branchcode = "*"; + if ( $controlbranch eq "ItemHomeLibrary" ) { + $branchcode = $item->{$hbr}; + } elsif ( $controlbranch eq "PatronLibrary" ) { + $branchcode = $borrower->branchcode; + } + warn 'getlastpickup'; + warn $branchcode; + warn $borrower->{'categorycode'}; + warn $item->{itype}; + my $issuingrule = Koha::IssuingRules->get_effective_issuing_rule({ + branchcode => $branchcode, + categorycode => $borrower->{'categorycode'}, + itemtype => $item->{itype}, + }); + + my $reservebranch; + if ($reserve->{'branchcode'}) { + $reservebranch = $reserve->{'branchcode'}; + } else { + $reservebranch = $reserve->branchcode; + } + if ( defined($issuingrule) && defined $issuingrule->holdspickupwait && $issuingrule->holdspickupwait > 0 ) { #If holdspickupwait is <= 0, it means this feature is disabled for this type of material. + $date->add( days => $issuingrule->holdspickupwait ); + my $calendar = Koha::Calendar->new( branchcode => $reservebranch ); + my $is_holiday = $calendar->is_holiday( $date ); + while ( $is_holiday ) { + $date->add( days => 1 ); + $is_holiday = $calendar->is_holiday( $date ); + } + $reserve->{lastpickupdate} = $date->ymd(); + return $date; + } + #Without explicitly setting the return value undef, the lastpickupdate-column is + # set as 0000-00-00 instead of NULL in DBD::MySQL. + #This causes this hold to always expire any lastpickupdate check, + ## effectively canceling it as soon as cancel_expired_holds.pl is ran. + ##This is exactly the opposite of disabling the autoexpire feature. + ##So please let me explicitly return undef, because Perl cant always handle everything. + delete $reserve->{lastpickupdate}; + return undef; +} + =head2 CheckReserves ($status, $reserve, $all_reserves) = &CheckReserves($itemnumber); @@ -993,7 +1088,7 @@ sub ModReserveFill { =head2 ModReserveStatus - &ModReserveStatus($itemnumber, $newstatus); + &ModReserveStatus($itemnumber, $newstatus, $holdtype); Update the reserve status for the active (priority=0) reserve. @@ -1004,12 +1099,12 @@ $newstatus is the new status. =cut sub ModReserveStatus { - #first : check if we have a reservation for this item . my ($itemnumber, $newstatus) = @_; my $dbh = C4::Context->dbh; my $now = dt_from_string; + my $reserve = $dbh->selectrow_hashref(q{ SELECT * FROM reserves @@ -1017,10 +1112,13 @@ sub ModReserveStatus { AND found IS NULL AND priority = 0 }, {}, $itemnumber); - return unless $reserve; - my $lastpickupdate = GetLastPickupDate( $reserve ); + return unless $reserve; + my $borrower = Koha::Patrons->find( $reserve->{borrowernumber} ); + $borrower = $borrower->unblessed; + my $item = C4::Items::GetItem( $reserve->{itemnumber} ); + my $lastpickupdate = GetLastPickupDate( $reserve, $item, $borrower ); my $query = q{ UPDATE reserves SET found = ?, @@ -1081,12 +1179,26 @@ sub ModReserveAffect { $hold->itemnumber($itemnumber); $hold->set_waiting($transferToDo); + my $item = C4::Items::GetItem( $itemnumber ); + my $borrower = Koha::Patrons->find( $borrowernumber ); + $borrower = $borrower->unblessed; + my $lastpickupdate = GetLastPickupDate( $hold, $item, $borrower ); + warn $lastpickupdate; + my $query = " + UPDATE reserves + SET lastpickupdate = ? + WHERE borrowernumber = ? + AND itemnumber = ? + "; + $sth = $dbh->prepare($query); + $sth->execute( $lastpickupdate, $borrowernumber,$itemnumber); + _koha_notify_reserve( $hold->reserve_id ) if ( !$transferToDo && !$already_on_shelf ); _FixPriority( { biblionumber => $biblionumber } ); - if ( C4::Context->preference("ReturnToShelvingCart") ) { + if ( C4::Context->preference("ReturnToShelvingCart") ) { CartToShelf($itemnumber); } @@ -2025,7 +2137,7 @@ sub ReserveSlip { return unless $hold; my $reserve = $hold->unblessed; - +warn Dumper($reserve); return C4::Letters::GetPreparedLetter ( module => 'circulation', letter_code => 'HOLD_SLIP', diff --git a/Koha/Hold.pm b/Koha/Hold.pm index 23d5d44..0618afd 100644 --- a/Koha/Hold.pm +++ b/Koha/Hold.pm @@ -33,6 +33,7 @@ use Koha::Items; use Koha::Libraries; use Koha::Old::Holds; use Koha::Calendar; +use Koha::IssuingRules; use base qw(Koha::Object); @@ -167,10 +168,37 @@ sub set_waiting { my $calendar = Koha::Calendar->new( branchcode => $self->branchcode ); my $expirationdate = $today->clone; - $expirationdate->add(days => $max_pickup_delay); + + my $patron = Koha::Patrons->find( {borrowernumber => $self->borrowernumber} ); + my $item = Koha::Items->find( $self->itemnumber() ); + my $hold = Koha::Holds->find( $self->reserve_id ); +# my $lastpickupdate = C4::Reserves->GetLastPickupDate( $hold, $item, $patron); + + # Get the controlbranch + my $controlbranch = C4::Reserves->GetReservesControlBranch( $item, $patron ); + my $hbr = C4::Context->preference('HomeOrHoldingBranch') || "homebranch"; + my $branchcode = "*"; + if ( $controlbranch eq "ItemHomeLibrary" ) { + $branchcode = $item->{$hbr}; + } elsif ( $controlbranch eq "PatronLibrary" ) { + $branchcode = $patron->branchcode; + } + + warn $branchcode; + warn $patron->categorycode; + warn $item->itype; + my $issuingrule = Koha::IssuingRules->get_effective_issuing_rule({ + branchcode => $branchcode, + categorycode => $patron->categorycode, + itemtype => $item->itype, + }); + + if ( defined $issuingrule->holdspickupwait && $issuingrule->holdspickupwait > 0) { + $expirationdate->add(days => $issuingrule->holdspickupwait); + } if ( C4::Context->preference("ExcludeHolidaysFromMaxPickUpDelay") ) { - $expirationdate = $calendar->days_forward( dt_from_string(), $max_pickup_delay ); + $expirationdate = $calendar->days_forward( dt_from_string(), $issuingrule->{holdspickupwait} ); } # If patron's requested expiration date is prior to the diff --git a/Koha/IssuingRules.pm b/Koha/IssuingRules.pm index 608b4ed..a9459d0 100644 --- a/Koha/IssuingRules.pm +++ b/Koha/IssuingRules.pm @@ -22,7 +22,7 @@ use Modern::Perl; use Koha::Database; use Koha::Caches; - +use Data::Dumper; use Koha::IssuingRule; use base qw(Koha::Objects); diff --git a/admin/smart-rules.pl b/admin/smart-rules.pl index b3dce00..ea392f3 100755 --- a/admin/smart-rules.pl +++ b/admin/smart-rules.pl @@ -182,6 +182,7 @@ elsif ($op eq 'add') { maxonsiteissueqty => $maxonsiteissueqty, renewalsallowed => $renewalsallowed, renewalperiod => $renewalperiod, + holdspickupwait => $holdspickupwait, norenewalbefore => $norenewalbefore, auto_renew => $auto_renew, no_auto_renewal_after => $no_auto_renewal_after, diff --git a/circ/returns.pl b/circ/returns.pl index c2f20ef..d1375da 100755 --- a/circ/returns.pl +++ b/circ/returns.pl @@ -422,6 +422,7 @@ if ( $messages->{'ResFound'}) { my $diffBranchSend = ($userenv_branch ne $reserve->{branchcode}) ? $reserve->{branchcode} : undef; ModReserveAffect( $reserve->{itemnumber}, $reserve->{borrowernumber}, $diffBranchSend, $reserve->{reserve_id} ); + ModReserveStatus($reserve->{itemnumber}, 'W'); my ( $messages, $nextreservinfo ) = GetOtherReserves($reserve->{itemnumber}); my $patron = Koha::Patrons->find( $nextreservinfo ); diff --git a/circ/waitingreserves.pl b/circ/waitingreserves.pl index c601b23..4504768 100755 --- a/circ/waitingreserves.pl +++ b/circ/waitingreserves.pl @@ -27,11 +27,11 @@ use C4::Circulation; use C4::Members; use C4::Biblio; use C4::Items; -use Date::Calc qw( - Today - Add_Delta_Days - Date_to_Days -); +#use Date::Calc qw( +# Today +# Add_Delta_Days +# Date_to_Days +#); use C4::Reserves; use C4::Koha; use Koha::DateUtils; @@ -39,6 +39,7 @@ use Koha::BiblioFrameworks; use Koha::Items; use Koha::ItemTypes; use Koha::Patrons; +use Data::Dumper; my $input = new CGI; @@ -87,24 +88,23 @@ my ($reservcount, $overcount); my $holds = Koha::Holds->waiting->search({ priority => 0, ( $all_branches ? () : ( branchcode => $default ) ) }, { order_by => ['waitingdate'] }); # get reserves for the branch we are logged into, or for all branches -my $today = Date_to_Days(&Today); +#my $today = Date_to_Days(&Today); +my $today = dt_from_string; my $max_pickup_delay = C4::Context->preference('ReservesMaxPickUpDelay'); while ( my $hold = $holds->next ) { next unless ($hold->waitingdate && $hold->waitingdate ne '0000-00-00'); - my $item = $hold->item; my $patron = $hold->borrower; my $biblio = $item->biblio; my $holdingbranch = $item->holdingbranch; my $homebranch = $item->homebranch; - my %getreserv = ( title => $biblio->title, itemnumber => $item->itemnumber, waitingdate => $hold->waitingdate, reservedate => $hold->reservedate, - borrowernum => $patron->borrowernumber, + borrowernumber => $patron->borrowernumber, biblionumber => $biblio->biblionumber, barcode => $item->barcode, homebranch => $homebranch, @@ -119,9 +119,6 @@ while ( my $hold = $holds->next ) { ); my $itemtype = Koha::ItemTypes->find( $item->effective_itemtype ); - my ( $expire_year, $expire_month, $expire_day ) = split (/-/, $hold->expirationdate); - my $calcDate = Date_to_Days( $expire_year, $expire_month, $expire_day ); - $getreserv{'itemtype'} = $itemtype->description; # FIXME Should not it be translated_description? $getreserv{'subtitle'} = GetRecordValue( 'subtitle', @@ -132,21 +129,24 @@ while ( my $hold = $holds->next ) { } $getreserv{patron} = $patron; - - if ($today > $calcDate) { - if ($cancelall) { - my $res = cancel( $item->itemnumber, $patron->borrowernumber, $holdingbranch, $homebranch, !$transfer_when_cancel_all ); - push @cancel_result, $res if $res; - next; - } else { - push @overloop, \%getreserv; - $overcount++; + warn $getreserv{'waitingdate'}; + warn $getreserv{'lastpickupdate'}; + if ( $getreserv{'waitingdate'} ) { + my $lastpickupdate = dt_from_string($getreserv{'lastpickupdate'}); + if ( DateTime->compare( $today, $lastpickupdate ) == 1 ) { + if ($cancelall) { + my $res = cancel( $item->itemnumber, $patron->borrowernumber, $item->holdingbranch, $homebranch, !$transfer_when_cancel_all ); + push @cancel_result, $res if $res; + next; + } else { + push @overloop, \%getreserv; + $overcount++; + } + }else{ + push @reservloop, \%getreserv; + $reservcount++; } - }else{ - push @reservloop, \%getreserv; - $reservcount++; } - } $template->param(cancel_result => \@cancel_result) if @cancel_result; @@ -159,7 +159,7 @@ $template->param( show_date => output_pref({ dt => dt_from_string, dateformat => 'iso', dateonly => 1 }), ReservesMaxPickUpDelay => $max_pickup_delay, tab => $tab, - show_date => format_date(C4::Dates->today('iso')), + show_date => $today, ); # Checking if there is a Fast Cataloging Framework @@ -181,7 +181,6 @@ sub cancel { my $transfer = $fbr ne $tbr; # XXX && !$nextreservinfo; return if $transfer && $skip_transfers; - my ( $messages, $nextreservinfo ) = ModReserveCancelAll( $item, $borrowernumber ); # if the document is not in his homebranch location and there is not reservation after, we transfer it diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/smart-rules.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/smart-rules.tt index d10ff8d..fb53a22 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/smart-rules.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/smart-rules.tt @@ -172,6 +172,7 @@ [% rule.suspension_chargeperiod | html %] [% rule.renewalsallowed | html %] [% rule.renewalperiod | html %] + [% rule.holdspickupwait | html %] [% rule.norenewalbefore | html %] [% IF ( rule.auto_renew ) %] diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/circ/waitingreserves.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/circ/waitingreserves.tt index 53ed591..fccd325 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/circ/waitingreserves.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/circ/waitingreserves.tt @@ -71,7 +71,7 @@ [% IF ( reserveloop ) %] - + @@ -104,7 +104,7 @@ + diff --git a/koha-tmpl/intranet-tmpl/prog/js/holds.js b/koha-tmpl/intranet-tmpl/prog/js/holds.js index c6bc3e5..02c3b21 100644 --- a/koha-tmpl/intranet-tmpl/prog/js/holds.js +++ b/koha-tmpl/intranet-tmpl/prog/js/holds.js @@ -18,6 +18,9 @@ $(document).ready(function() { "mDataProp": "reservedate_formatted" }, { + "mDataProp": "lastpickupdate_formatted" + }, + { "mDataProp": function ( oObj ) { title = "
Waiting sinceAvailable since-until Date hold placed Title Patron[% reserveloo.enumchron | html %]
- + diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/help/admin/smart-rules.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/help/admin/smart-rules.tt index 72a4b91..1452e51 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/help/admin/smart-rules.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/help/admin/smart-rules.tt @@ -7,23 +7,23 @@

The rules are applied from most specific to less specific, using the first found in this order:

    -
  • same library, same patron type, same item type
  • -
  • same library, same patron type, all item type
  • -
  • same library, all patron types, same item type
  • -
  • same library, all patron types, all item types
  • -
  • all libraries, same patron type, same item type
  • -
  • all libraries, same patron type, all item types
  • -
  • all libraries, all patron types, same item type
  • -
  • all libraries, all patron types, all item types
  • +
  • same library, same patron type, same item type
  • +
  • same library, same patron type, all item type
  • +
  • same library, all patron types, same item type
  • +
  • same library, all patron types, all item types
  • +
  • all libraries, same patron type, same item type
  • +
  • all libraries, same patron type, all item types
  • +
  • all libraries, all patron types, same item type
  • +
  • all libraries, all patron types, all item types

The CircControl and HomeOrHoldingBranch also come in to play when figuring out which circulation rule to follow.

    -
  • If CircControl is set to "the library you are logged in at" circ rules will be selected based on the library you are logged in at
  • -
  • If CircControl is set to "the library the patron is from" circ rules will be selected based on the patron's library
  • -
  • If CircControl is set to "the library the item is from" circ rules will be selected based on the item's library where HomeOrHoldingBranch chooses if item's home library is used or holding library is used.
  • -
  • If IndependentBranches is set to 'Prevent' then the value of HomeOrHoldingBranch is used in figuring out if the item can be checked out. If the item's home library does not match the logged in library, the item cannot be checked out unless you are a superlibrarian.
  • +
  • If CircControl is set to "the library you are logged in at" circ rules will be selected based on the library you are logged in at
  • +
  • If CircControl is set to "the library the patron is from" circ rules will be selected based on the patron's library
  • +
  • If CircControl is set to "the library the item is from" circ rules will be selected based on the item's library where HomeOrHoldingBranch chooses if item's home library is used or holding library is used.
  • +
  • If IndependentBranches is set to 'Prevent' then the value of HomeOrHoldingBranch is used in figuring out if the item can be checked out. If the item's home library does not match the logged in library, the item cannot be checked out unless you are a superlibrarian.

If you are a single library system choose your branch name before creating rules (sometimes having only rules for the 'all libraries' option can cause issues with holds)

@@ -37,9 +37,9 @@

From the matrix you can choose any combination of patron categories and item types to apply the rules to

    -
  • First choose which patron category you'd like the rule to be applied to. If you leave this to 'All' it will apply to all patron categories
  • -
  • Choose the 'Item Type' you would like this rule to apply to. If you leave this to 'All' it will apply to all item types
  • -
  • Limit the number of items a patron can have checked out at the same time by entering a number in the 'Current Checkouts Allowed' field
  • +
  • First choose which patron category you'd like the rule to be applied to. If you leave this to 'All' it will apply to all patron categories
  • +
  • Choose the 'Item Type' you would like this rule to apply to. If you leave this to 'All' it will apply to all item types
  • +
  • Limit the number of items a patron can have checked out at the same time by entering a number in the 'Current Checkouts Allowed' field
  • Define the period of time an item can be checked out to a patron by entering the number of units (days or hours) in the 'Loan Period' box.
  • Choose which unit of time, Days or Hours, that the loan period and fines will be calculate in
  • You can also define a hard due date for a specific patron category and item type. A hard due date ignores your usual circulation rules and makes it so that all items of the type defined are due on, before or after the date you specify.
  • @@ -119,7 +119,7 @@
-
  • Once your policy is set, you can unset it by clicking the 'Unset' link to the right of the rule
  • +
  • Once your policy is set, you can unset it by clicking the 'Unset' link to the right of the rule
  • Checkouts Per Patron

    diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/members/moremember.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/members/moremember.tt index a88a98e..393fd56 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/members/moremember.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/members/moremember.tt @@ -730,6 +730,7 @@
    Hold dateLast pickup date Title Call number Barcode