Bugzilla – Attachment 175251 Details for
Bug 38635
Improve place hold confirmation page in the OPAC
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
Bug 38635: Improve place hold confirmation page in the OPAC
Bug-38635-Improve-place-hold-confirmation-page-in-.patch (text/plain), 88.10 KB, created by
Owen Leonard
on 2024-12-05 17:02:18 UTC
(
hide
)
Description:
Bug 38635: Improve place hold confirmation page in the OPAC
Filename:
MIME Type:
Creator:
Owen Leonard
Created:
2024-12-05 17:02:18 UTC
Size:
88.10 KB
patch
obsolete
>From 65fa40c36da0ae593f0e4776cfed1114f220d758 Mon Sep 17 00:00:00 2001 >From: Owen Leonard <oleonard@myacpl.org> >Date: Wed, 4 Dec 2024 17:24:32 +0000 >Subject: [PATCH] Bug 38635: Improve place hold confirmation page in the OPAC > >This patch makes some markup and style changes to the hold confirmation >page in the OPAC with the intention of making the interface clearer and >less cluttered. > >The "Place hold on" label for each title's checkbox has been hidden from >sighted users and visually grouped with the title information. The >checkbox itself is now hidden if only 1 hold is being placed. > >The title is now a <legend> inside a <fieldset> in order to take >advantage of the fact that when fieldset has a "disabled" property the >form controls contained within are all disabled. > >When placing multiple holds at once, unchecking the checkbox next to a >title will disable that title's form fields and give it a "disabled" >appearance. > >Some Bootstrap grid markup has been added in order to improve the page's >responsive behavior. This update includes some indentation changes, so >ignore whitespace when viewing the diff. > >Unrelated: Incorrect classes have been fixed on a few alerts. Also, CSS >related to a long-removed 3rd party service "iDreamBooks" has been >removed. > >To test, apply the patch and rebuild the OPAC CSS. > >- Log in to the OPAC as a user who can place holds. >- Perform a catalog search which will return multiple results. >- Next to one of those results, find a title which can be placed on > hold and click the "Place hold" link. > - On the hold confirmation page you should see the title of your hold > and the standard controls. There should be no checkbox next to the > title. >- Return to the search results page and check the checkbox for at > least two items which are available to be place on hold. Click the > "Place hold" button in the search results toolbar. > - On the hold confirmation page you should see the titles you > selected, each with a checkbox next to the title. > - Uncheck one of the checkboxes. The details for that title should > switch to "disabled" appearance. You should be unable to change > the pickup location or click the "Show more options" link. > - Re-check the checkbox and click the "Show more options" link to > expand more fields. > - Uncheck the checkbox again. The expanded section should collapse. >- Confirm that single and multiple holds are placed correctly. Test with > various additional settings like expiration date or specific item to > confirm that these options still work. > >Sponsored-by: Athens County Public Libraries >--- > .../opac-tmpl/bootstrap/css/src/opac.scss | 51 +- > .../bootstrap/en/modules/opac-reserve.tt | 916 +++++++++--------- > 2 files changed, 479 insertions(+), 488 deletions(-) > >diff --git a/koha-tmpl/opac-tmpl/bootstrap/css/src/opac.scss b/koha-tmpl/opac-tmpl/bootstrap/css/src/opac.scss >index 2cfe371927..b67e2246f6 100644 >--- a/koha-tmpl/opac-tmpl/bootstrap/css/src/opac.scss >+++ b/koha-tmpl/opac-tmpl/bootstrap/css/src/opac.scss >@@ -2315,16 +2315,11 @@ nav { > } > } > >-#holds { >- margin: 0 auto; >- max-width: 800px; >-} >- > .holdrow { > border-bottom: 1px solid #CCC; > clear: both; > margin-bottom: .5em; >- padding: 0 1em 1em 1em; >+ padding: 1em 0; > > fieldset { > border: 0; >@@ -2348,6 +2343,7 @@ nav { > .toggle-hold-options { > background-color: #EEE; > clear: both; >+ color: #01547C; > display: block; > font-weight: bold; > margin: 1em 0; >@@ -2358,41 +2354,28 @@ nav { > clear: both; > } > >-#idreambooksreadometer { >- float: right; >+.holdbiblio { >+ border: 1px solid #DDD; >+ display: flex; >+ float: none; >+ font-size: 1rem; >+ font-weight: bold; >+ gap: 1rem; >+ margin: .5rem 0; >+ padding: 1rem; > } > >-.idreambookslegend { >- font-size: small; >-} >+.holdrow[disabled] { >+ opacity: .8; > >-.idreambookssummary { >- a { >- color: #707070; >- text-decoration: none; >- } >- >- img { >- vertical-align: middle; >+ .holdcontrols * { >+ pointer-events: none; > } > } > >-.idbresult { >- color: #29ADE4; >- margin: .5em; >- padding: .5em; >- text-align: center; > >- img { >- padding-right: 6px; >- vertical-align: middle; >- } >- >- a, >- a:visited { >- color: #29ADE4; >- text-decoration: none; >- } >+.confirmjs_hold { >+ display: block; > } > > .js-show { >diff --git a/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-reserve.tt b/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-reserve.tt >index 78db93ddbb..27a7e2c20e 100644 >--- a/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-reserve.tt >+++ b/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-reserve.tt >@@ -27,488 +27,500 @@ > > <div class="container"> > <div id="holds" class="maincontent"> >- <h1>Placing a hold</h1> >- [% IF ( message ) %] >- <div id="holdmessages" class="alert"> >- <p>Sorry, you cannot place holds.</p> >- <ul> >- [% IF ( GNA ) %] >- <li id="gna"> >- According to our records, we don't have up-to-date contact information. Please contact the library. >- <a href="/cgi-bin/koha/opac-memberentry.pl">[% IF ( Koha.Preference('OPACPatronDetails') ) %]<span>Update your contact information</span>[% ELSE %]<span>Go to your contact information</span>[% END %]</a> >- [% IF ( Koha.Preference('OPACPatronDetails') ) %]<em>(Please note: there may be a delay in restoring your account if you submit online.)</em>[% END %] >- </li> >- [% END %] >+ <div class="row"> >+ <div class="col-lg-8 offset-lg-2"> >+ <h1>Placing a hold</h1> >+ [% IF ( message ) %] >+ <div id="holdmessages" class="alert"> >+ <p>Sorry, you cannot place holds.</p> >+ <ul> >+ [% IF ( GNA ) %] >+ <li id="gna"> >+ According to our records, we don't have up-to-date contact information. Please contact the library. >+ <a href="/cgi-bin/koha/opac-memberentry.pl">[% IF ( Koha.Preference('OPACPatronDetails') ) %]<span>Update your contact information</span>[% ELSE %]<span>Go to your contact information</span>[% END %]</a> >+ [% IF ( Koha.Preference('OPACPatronDetails') ) %]<em>(Please note: there may be a delay in restoring your account if you submit online.)</em>[% END %] >+ </li> >+ [% END %] > >- [% IF ( lost ) %] >- <li id="lost"> >- Your library card has been marked as lost or stolen.<br /> >- <em>If this is an error, please take your library card to the circulation desk at your local library and the error will be corrected.</em> >- </li> >- [% END %] >+ [% IF ( lost ) %] >+ <li id="lost"> >+ Your library card has been marked as lost or stolen.<br /> >+ <em>If this is an error, please take your library card to the circulation desk at your local library and the error will be corrected.</em> >+ </li> >+ [% END %] > >- [% IF ( debarred ) %] >- <li id="debarred"> >- Your account has been frozen. >- [% IF debarred_comment %] >- Comment:<br /> >- <span id="userdebarred_comment"> >- <strong> >- [% IF debarred_comment.search('OVERDUES_PROCESS') %] >- Restriction added by overdues process [% debarred_comment.remove('OVERDUES_PROCESS ') | html_line_break %] >- [% ELSE %] >- [% FOR restriction IN logged_in_user.restrictions %] >- <div class="patron_restriction"> >- [%- restriction.type.display_text | html -%][%- IF restriction.comment -%]: <span class="restriction_comment">[% restriction.comment | html_line_break %]</span>, frozen until: >- <span class="restriction_expiration"> >- [%- IF restriction.expiration -%] >- [%- restriction.expiration | $KohaDates -%] >- [%- ELSE -%] >- <strong>Indefinite</strong> >- [%- END -%] >- </span> >+ [% IF ( debarred ) %] >+ <li id="debarred"> >+ Your account has been frozen. >+ [% IF debarred_comment %] >+ Comment:<br /> >+ <span id="userdebarred_comment"> >+ <strong> >+ [% IF debarred_comment.search('OVERDUES_PROCESS') %] >+ Restriction added by overdues process [% debarred_comment.remove('OVERDUES_PROCESS ') | html_line_break %] >+ [% ELSE %] >+ [% FOR restriction IN logged_in_user.restrictions %] >+ <div class="patron_restriction"> >+ [%- restriction.type.display_text | html -%][%- IF restriction.comment -%]: <span class="restriction_comment">[% restriction.comment | html_line_break %]</span>, frozen until: >+ <span class="restriction_expiration"> >+ [%- IF restriction.expiration -%] >+ [%- restriction.expiration | $KohaDates -%] >+ [%- ELSE -%] >+ <strong>Indefinite</strong> >+ [%- END -%] >+ </span> >+ [% END %] >+ </div> >+ [% END %] > [% END %] >- </div> >- [% END %] >- [% END %] >- </strong> >- </span> >+ </strong> >+ </span> >+ [% END %] >+ >+ [% IF debarred_date && debarred_date != '9999-12-31' %] >+ End date: >+ <span id="userdebarred_date">[% debarred_date | $KohaDates %]</span> >+ [% END %] >+ <br /><em>Usually the reason for freezing an account is old overdues or damage fees. If shows your account to be clear, please contact the library.</em> <a href="/cgi-bin/koha/opac-account.pl">Go to your charges page</a> >+ </li> > [% END %] > >- [% IF debarred_date && debarred_date != '9999-12-31' %] >- End date: >- <span id="userdebarred_date">[% debarred_date | $KohaDates %]</span> >+ [% IF ( too_much_oweing ) %] >+ <li id="too_much_oweing"> >+ You have unpaid fines. Amount: [% too_much_oweing | $Price %]. >+ </li> > [% END %] >- <br /><em>Usually the reason for freezing an account is old overdues or damage fees. If shows your account to be clear, please contact the library.</em> <a href="/cgi-bin/koha/opac-account.pl">Go to your charges page</a> >- </li> >- [% END %] > >- [% IF ( too_much_oweing ) %] >- <li id="too_much_oweing"> >- You have unpaid fines. Amount: [% too_much_oweing | $Price %]. >- </li> >- [% END %] >+ [% IF ( too_many_reserves ) %] >+ <li id="too_many_reserves"> >+ Sorry, you cannot place more than [% too_many_reserves | html %] holds. >+ </li> >+ [% END %] > >- [% IF ( too_many_reserves ) %] >- <li id="too_many_reserves"> >- Sorry, you cannot place more than [% too_many_reserves | html %] holds. >- </li> >- [% END %] >+ [% IF ( bad_biblionumber ) %] >+ <li id="bad_biblionumber"> >+ ERROR: No record found for record ID [% bad_biblionumber | html %]. >+ </li> >+ [% END %] > >- [% IF ( bad_biblionumber ) %] >- <li id="bad_biblionumber"> >- ERROR: No record found for record ID [% bad_biblionumber | html %]. >- </li> >- [% END %] >+ [% IF ( no_items_selected ) %] >+ <li id="no_items_selected"> >+ You must select at least one item. >+ </li> >+ [% END %] > >- [% IF ( no_items_selected ) %] >- <li id="no_items_selected"> >- You must select at least one item. >- </li> >- [% END %] >+ [% IF ( no_branch_selected ) %] >+ <li id="no_branch_selected"> >+ You must select a library for pickup. >+ </li> >+ [% END %] > >- [% IF ( no_branch_selected ) %] >- <li id="no_branch_selected"> >- You must select a library for pickup. >- </li> >- [% END %] >+ [% IF ( no_biblionumber ) %] >+ <li id="no_biblionumber"> >+ ERROR: No record ID specified. >+ </li> >+ [% END %] > >- [% IF ( no_biblionumber ) %] >- <li id="no_biblionumber"> >- ERROR: No record ID specified. >- </li> >- [% END %] >+ [% IF ( bad_data ) %] >+ <li id="bad_data"> >+ ERROR: Internal error: incomplete hold request. >+ </li> >+ [% END %] > >- [% IF ( bad_data ) %] >- <li id="bad_data"> >- ERROR: Internal error: incomplete hold request. >- </li> >- [% END %] >+ [% IF ( expired_patron ) %] >+ <li id="expired_patron"> >+ Your library card has expired. Please contact your librarian if you wish to renew your card. >+ </li> >+ [% END %] > >- [% IF ( expired_patron ) %] >- <li id="expired_patron"> >- Your library card has expired. Please contact your librarian if you wish to renew your card. >- </li> >+ [% IF ( no_pickup_locations ) %] >+ <li id="no_pickup_locations"> >+ None of the libraries are available for pickup location. >+ </li> >+ [% END %] >+ </ul> >+ </div> <!-- /.message --> >+ [% ELSE # /IF message %] >+ >+ [% IF ( none_available && multi_hold ) %] >+ <div id="none_available" class="alert"> >+ Sorry, none of these titles can be placed on hold. >+ </div> > [% END %] > >- [% IF ( no_pickup_locations ) %] >- <li id="no_pickup_locations"> >- None of the libraries are available for pickup location. >- </li> >+ [% END # / IF message %] >+ >+ [% UNLESS ( message ) %] >+ [% UNLESS ( none_available ) %] >+ <h2>Confirm holds for:[% INCLUDE 'patron-title.inc' patron = logged_in_user %] ([% logged_in_user.cardnumber | html %])</h2> >+ [% END # / UNLESS none_available %] >+ >+ [% IF ( new_reserves_allowed ) %] >+ <div id="new_reserves_allowed" class="alert"> >+ <strong>Sorry,</strong> you can only place [% new_reserves_allowed | html %] more holds. Please uncheck the checkboxes for the items you wish to not place holds on. >+ </div> > [% END %] >- </ul> >- </div> <!-- /.message --> >- [% ELSE # /IF message %] >- >- [% IF ( none_available && multi_hold ) %] >- <div id="none_available" class="alert"> >- Sorry, none of these titles can be placed on hold. >- </div> >- [% END %] >- >- [% END # / IF message %] >- >- [% UNLESS ( message ) %] >- [% UNLESS ( none_available ) %] >- <h2>Confirm holds for:[% INCLUDE 'patron-title.inc' patron = logged_in_user %] ([% logged_in_user.cardnumber | html %])</h2> >- [% END # / UNLESS none_available %] >- >- [% IF ( new_reserves_allowed ) %] >- <div id="new_reserves_allowed" class="alert"> >- <strong>Sorry,</strong> you can only place [% new_reserves_allowed | html %] more holds. Please uncheck the checkboxes for the items you wish to not place holds on. >- </div> >- [% END %] >- >- <form action="/cgi-bin/koha/opac-reserve.pl" method="post" id="hold-request-form"> >- [% INCLUDE 'csrf-token.inc' %] >- <legend class="sr-only">Hold requests</legend> >- <input type="hidden" name="op" value="cud-place_reserve" /> >- <!-- These values are set dynamically by js --> >- <input type="hidden" name="biblionumbers" id="biblionumbers"/> >- <input type="hidden" name="selecteditems" id="selections"/> >- <div id="bigloop"> >- >- [% FOREACH bibitemloo IN bibitemloop %] >- <div class="holdrow"> >- [% IF bibitemloo.forced_hold_level %] >- <div class="alert alert-info forced_hold_level"> >- [% IF bibitemloo.forced_hold_level == 'item' %] >- <span>You already have at least one item level hold on this title. >- All further holds must be item level.</span> >- [% ELSE %] >- <span>You already have at least one record level hold on this title. >- All further holds must be record level.</span> >+ >+ <form action="/cgi-bin/koha/opac-reserve.pl" method="post" id="hold-request-form"> >+ [% INCLUDE 'csrf-token.inc' %] >+ <legend class="sr-only">Hold requests</legend> >+ <input type="hidden" name="op" value="cud-place_reserve" /> >+ <!-- These values are set dynamically by js --> >+ <input type="hidden" name="biblionumbers" id="biblionumbers"/> >+ <input type="hidden" name="selecteditems" id="selections"/> >+ <div id="bigloop"> >+ >+ [% FOREACH bibitemloo IN bibitemloop %] >+ <fieldset id="holdrow_[% bibitemloo.biblionumber | html %]" class="holdrow"> >+ [% IF bibitemloo.forced_hold_level %] >+ <div class="alert alert-info forced_hold_level"> >+ [% IF bibitemloo.forced_hold_level == 'item' %] >+ <span>You already have at least one item level hold on this title. >+ All further holds must be item level.</span> >+ [% ELSE %] >+ <span>You already have at least one record level hold on this title. >+ All further holds must be record level.</span> >+ [% END %] >+ </div> > [% END %] >- </div> >- [% END %] > >- [% IF ( bibitemloo.reserve_charge ) %] >- <div class="alert" id="reserve_fee"> >- [% IF Koha.Preference('HoldFeeMode') == 'any_time_is_collected' %] >- <span>You will be charged a hold fee of [% bibitemloo.reserve_charge | $Price %] when you collect this item</span> >- [% ELSE %] >- <span>You will be charged a hold fee of [% bibitemloo.reserve_charge | $Price %] for placing this hold</span> >+ [% IF ( bibitemloo.reserve_charge ) %] >+ <div class="alert alert-warning" id="reserve_fee"> >+ [% IF Koha.Preference('HoldFeeMode') == 'any_time_is_collected' %] >+ <span>You will be charged a hold fee of [% bibitemloo.reserve_charge | $Price %] when you collect this item</span> >+ [% ELSE %] >+ <span>You will be charged a hold fee of [% bibitemloo.reserve_charge | $Price %] for placing this hold</span> >+ [% END %] >+ </div> > [% END %] >- </div> >- [% END %] > >- <p> >- [% IF ( bibitemloo.holdable ) %] >- <input class="reserve_mode" name="reserve_mode" type="hidden" value="single"/> >- <input class="single_bib" name="single_bib" type="hidden" value="[% bibitemloo.biblionumber | html %]"/> >- <span class="confirmjs_hold" title="[% bibitemloo.biblionumber | html %]" style="padding:.3em"></span> >- <span class="confirm_nonjs"> >- <input type="radio" class="confirmbox checkitem [% bibitemloo.biblionumber | html %]" name="[% bibitemloo.biblionumber | html %]" checked="checked" id="single_[% bibitemloo.biblionumber | html %]" value="any" /> >- <label class="confirm_label" for="single_[% bibitemloo.biblionumber | html %]">Place a hold on </label> >- </span> >- [% END # / bibitemloo.holdable %] >- >- [% INCLUDE 'biblio-title.inc' biblio=bibitemloo link=> 1%] >- >- [% IF ( bibitemloo.author ) %], by [% bibitemloo.author | html %][% END %] >- </p> >- >- [% UNLESS ( bibitemloo.holdable ) %] >- [% IF ( bibitemloo.ageRestricted ) %] >- <div class="alert alert-warning">Sorry, you are too young to place a hold for this item.</div> >- [% END %] >- [% IF ( bibitemloo.already_reserved ) %] >- <div class="alert alert-warning">You have already requested this title.</div> >- [% ELSIF ( bibitemloo.recall ) %] >- <div class="alert alert-warning">You have already placed a recall on this title.</div> >- [% ELSE %] >- [% IF bibitemloo.alreadypossession %] >- <div class="alert alert-warning">This title cannot be requested because it's already in your possession.</div> >- [% ELSIF bibitemloo.tooManyReserves %] >- <div class="alert alert-warning">This title cannot be requested because you reached the maximum number of holds.</div> >- [% ELSIF bibitemloo.tooManyHoldsForThisRecord %] >- <div class="alert alert-warning">This title cannot be requested because you exceeded max holds per record.</div> >- [% ELSIF bibitemloo.tooManyReservesToday %] >- <div class="alert alert-warning">This title cannot be requested because you reached the daily hold limit.</div> >- [% ELSIF bibitemloo.itemAlreadyOnHold %] >- <div class="alert alert-warning">This title cannot be requested because you already have hold for this item.</div> >- [% ELSE %] >- [% UNLESS ( bibitemloo.bib_available ) %] >- <div class="alert">There are no items that can be placed on hold.</div> >- [% ELSE %] >- <div class="alert">This title cannot be requested.</div> >- [% END %] >- [% END # / UNLESS bibitemloo.already_patron_possession %] >- [% END # / IF bibitemloo.already_reserved %] >- [% END # / UNLESS bibitemloo.holdable %] >- >- [% IF ( bibitemloo.holdable ) %] >- <fieldset class="rows"> >- <ul> >- <!-- HOLDABLE --> >- [% UNLESS ( item_level_itypes ) %] >- <li class="itype"> >- <span class="label">Item type: </span> >- [% IF ( bibitemloo.imageurl ) %]<img class="itemtype-image" src="[% bibitemloo.imageurl | html %]" alt="" />[% END %] >- <span class="itypetext">[% bibitemloo.translated_description | html %]</span> >- </li> >- [% END %] >+ <legend id="holdbiblio_[% bibitemloo.biblionumber | html %]" class="holdbiblio"> >+ [% IF ( bibitemloo.holdable ) %] >+ <input class="reserve_mode" name="reserve_mode" type="hidden" value="single"/> >+ <input class="single_bib" name="single_bib" type="hidden" value="[% bibitemloo.biblionumber | html %]"/> > >- [% SET OPACShowHoldQueueDetails = Koha.Preference('OPACShowHoldQueueDetails') %] >- [% IF OPACShowHoldQueueDetails == 'holds_priority' || OPACShowHoldQueueDetails == 'priority' %] >- <li class="priority"> >- <span class="label">Your priority: </span> >- [% bibitemloo.rank | html %] >- </li> >- [% END %] >+ [% IF ( multi_hold ) %] >+ <span class="confirmjs_hold" data-biblionumber="[% bibitemloo.biblionumber | html %]"></span> >+ [% ELSE %] >+ <span class="confirmjs_hold" data-biblionumber="[% bibitemloo.biblionumber | html %]" style="display:none"></span> >+ [% END %] > >- [% IF OPACShowHoldQueueDetails == 'holds_priority' || OPACShowHoldQueueDetails == 'holds' %] >- <li class="holds-count"> >- <span class="label">Number of holds: </span> >- [% bibitemloo.reservecount | html %] >- </li> >- [% END %] >+ <span class="confirm_nonjs"> >+ <input type="radio" class="confirmbox checkitem [% bibitemloo.biblionumber | html %]" name="[% bibitemloo.biblionumber | html %]" checked="checked" id="single_[% bibitemloo.biblionumber | html %]" value="any" /> >+ <label class="confirm_label" for="single_[% bibitemloo.biblionumber | html %]">Place a hold on </label> >+ </span> >+ [% END # / bibitemloo.holdable %] > >- [% UNLESS ( singleBranchMode ) %] >- [% IF ( bibitemloo.holdable && Koha.Preference('OPACAllowUserToChooseBranch')) %] >- <li class="branch"> >- <label for="branch_[% bibitemloo.biblionumber | html %]">Pick up location:</label> >- [% UNLESS ( bibitemloo.holdable ) %] >- <select name="branch" id="branch_[% bibitemloo.biblionumber | html %]" disabled="disabled"> >- [% PROCESS options_for_libraries libraries => Branches.pickup_locations({ search_params => { biblio => bibitemloo.biblionumber, patron => logged_in_user }, selected => branch }) %] >- </select> >- [% ELSE %] >- [% SET at_least_one_library_not_available_for_pickup = 0 %] >- <select name="branch" id="branch_[% bibitemloo.biblionumber | html %]"> >- [% FOREACH library IN Branches.pickup_locations({ search_params => { biblio => bibitemloo.biblionumber, patron => logged_in_user }, selected => branch }) %] >- [% SET pickup_available_at = bibitemloo.not_available_at.grep('^' _ library.branchcode _ '$').size ? 0 : 1 %] >- [% IF library.selected AND pickup_available_at %] >- <option value="[% library.branchcode | html %]" selected="selected" >[% library.branchname | html %]</option> >- [% ELSIF pickup_available_at %] >- <option value="[% library.branchcode | html %]">[% library.branchname | html %]</option> >- [% ELSE %] >- [% SET at_least_one_library_not_available_for_pickup = 1 %] >- <option value="[% library.branchcode | html %]" disabled="disabled" title="At least one item is available at this library">[% library.branchname | html %]</option> >- [% END %] >- [% END %] >- </select> >- [% IF at_least_one_library_not_available_for_pickup %] >- <div class="at_least_one_library_not_available_note">Note: Library policy does not allow hold/pickup of an item available locally. Please come to the library to retrieve these items</div> >- [% END %] >- [% END # / UNLESS bibitemloo.holdable %] >- </li> >- [% END # / IF bibitemloo.holdable && Koha.Preference('OPACAllowUserToChooseBranch') %] >- [% END # / UNLESS singleBranchMode %] >- </ul> >- >- <a class="toggle-hold-options" id="toggle-hold-options-[% bibitemloo.biblionumber | html %]" style="display:none;" href="#">Show more options</a> >- >- <div id="hold-options-[% bibitemloo.biblionumber | html %]" class="hold-options"> >- >- <ul> >- [% IF ( reserve_in_future ) %] >- <li> >- <label for="from[% bibitemloo.biblionumber | html %]">Hold starts on date:</label> >- <input type="text" name="reserve_date_[% bibitemloo.biblionumber | html %]" id="from[% bibitemloo.biblionumber | html %]" data-start_for="to[% bibitemloo.biblionumber | html %]" data-flatpickr-futureinclusive="true" size="10" class="flatpickr holddatefrom" value="[% KohaDates.datetime_from_string | $KohaDates dateformat => 'iso' %]" /> >- <span class="date-format from" data-biblionumber="[% bibitemloo.biblionumber | html %]">[% INCLUDE 'date-format.inc' %]</span> >- <div class="required_label" style="display:none;">Required</div> >- </li> >- [% END %] >+ <div> >+ [% INCLUDE 'biblio-title.inc' biblio=bibitemloo link=> 1%] > >- <li> >- <label for="to[% bibitemloo.biblionumber | html %]">Hold not needed after:</label> >- <input type="text" name="expiration_date_[% bibitemloo.biblionumber | html %]" id="to[% bibitemloo.biblionumber | html %]" size="10" data-flatpickr-future="true" class="flatpickr futuredate" /> >- <span class="date-format to" data-biblionumber="[% bibitemloo.biblionumber | html %]">[% INCLUDE 'date-format.inc' %]</span> >- <div class="required_label" style="display:none;">Required</div> >- </li> >- >- [% IF Koha.Preference('AllowHoldItemTypeSelection') %] >- <li> >- <label for="itemtype">Request specific item type:</label> >- <select name="itemtype" id="itemtype"> >- <option value="">Any item type</option> >- [% FOREACH i IN bibitemloo.allowed_item_types %] >- <option value="[% i | html %]">[% ItemTypes.GetDescription( i ) | html %]</option> >- [%- END %] >- </select> >- </li> >- [% END %] >+ [% IF ( bibitemloo.author ) %]by [% bibitemloo.author | html %][% END %] >+ </div> >+ </legend> > >- [% UNLESS bibitemloo.forced_hold_level && ( bibitemloo.forced_hold_level == 'item' || bibitemloo.forced_hold_level == 'record' ) %] >- [% IF Koha.Preference('EnableItemGroupHolds') && bibitemloo.object.item_groups.count %] >- <li> >- <label for="itemtype">Request specific item group:</label> >- <select name="item_group_id_[% bibitemloo.biblionumber | html %]" id="item_group_id_[% bibitemloo.biblionumber | html %]"> >- <option value="">Any item group</option> >- [% FOREACH g IN bibitemloo.object.item_groups.search({}, { order_by => ['display_order'] }) %] >- [% IF g.items.count %] >- <option value="[% g.id | html %]">[% g.description | html %]</option> >- [% END %] >- [% END %] >- </select> >+ [% UNLESS ( bibitemloo.holdable ) %] >+ [% IF ( bibitemloo.ageRestricted ) %] >+ <div class="alert alert-warning">Sorry, you are too young to place a hold for this item.</div> >+ [% END %] >+ [% IF ( bibitemloo.already_reserved ) %] >+ <div class="alert alert-warning">You have already requested this title.</div> >+ [% ELSIF ( bibitemloo.recall ) %] >+ <div class="alert alert-warning">You have already placed a recall on this title.</div> >+ [% ELSE %] >+ [% IF bibitemloo.alreadypossession %] >+ <div class="alert alert-warning">This title cannot be requested because it's already in your possession.</div> >+ [% ELSIF bibitemloo.tooManyReserves %] >+ <div class="alert alert-warning">This title cannot be requested because you reached the maximum number of holds.</div> >+ [% ELSIF bibitemloo.tooManyHoldsForThisRecord %] >+ <div class="alert alert-warning">This title cannot be requested because you exceeded max holds per record.</div> >+ [% ELSIF bibitemloo.tooManyReservesToday %] >+ <div class="alert alert-warning">This title cannot be requested because you reached the daily hold limit.</div> >+ [% ELSIF bibitemloo.itemAlreadyOnHold %] >+ <div class="alert alert-warning">This title cannot be requested because you already have hold for this item.</div> >+ [% ELSE %] >+ [% UNLESS ( bibitemloo.bib_available ) %] >+ <div class="alert alert-warning">There are no items that can be placed on hold.</div> >+ [% ELSE %] >+ <div class="alert alert-warning">This title cannot be requested.</div> >+ [% END %] >+ [% END # / UNLESS bibitemloo.already_patron_possession %] >+ [% END # / IF bibitemloo.already_reserved %] >+ [% END # / UNLESS bibitemloo.holdable %] >+ >+ [% IF ( bibitemloo.holdable ) %] >+ <fieldset id="holdcontrols_[% bibitemloo.biblionumber | html %]" class="holdcontrols rows"> >+ <ul> >+ <!-- HOLDABLE --> >+ [% UNLESS ( item_level_itypes ) %] >+ <li class="itype"> >+ <span class="label">Item type: </span> >+ [% IF ( bibitemloo.imageurl ) %]<img class="itemtype-image" src="[% bibitemloo.imageurl | html %]" alt="" />[% END %] >+ <span class="itypetext">[% bibitemloo.translated_description | html %]</span> > </li> > [% END %] >- [% END %] > >- [% IF ( OpacHoldNotes ) %] >- <li> >- <div class="notesrow" id="notesrow_[% bibitemloo.biblionumber | html %]"> >- <label for="holdnotes_[% bibitemloo.biblionumber | html %]">Hold notes:</label> >- <textarea id="holdnotes_[% bibitemloo.biblionumber | html %]" rows="2" cols="30" name="notes_[% bibitemloo.biblionumber | html %]" >[% bibitemloo.holdnotes | html %]</textarea> >- </div> >- </li> >- [% END # / IF OpacHoldNotes %] >- >- [% IF bibitemloo.itemholdable %] >- <!-- ITEM HOLDS --> >- <li class="lradio place_on_type" style="display:none;"> >- [% UNLESS bibitemloo.forced_hold_level == 'item' || bibitemloo.forced_hold_level == 'item_group' || bibitemloo.force_hold %] >- <label class="radio inline" for="reqany_[% bibitemloo.biblionumber | html %]">Next available item</label> >- <input type="radio" name="reqtype_[% bibitemloo.biblionumber | html %]" >- id="reqany_[% bibitemloo.biblionumber | html %]" >- class="selectany" >- value="Any" >- checked="checked" >- /> >- [% END %] >- <label class="radio inline" for="reqspecific_[% bibitemloo.biblionumber | html %]">A specific item</label> >- <input type="radio" name="reqtype_[% bibitemloo.biblionumber | html %]" >- id="reqspecific_[% bibitemloo.biblionumber | html %]" >- class="selectspecific" >- value="Specific" >- /> >- </li> >- [% END # / IF bibitemloo.itemholdable %] >- </ul> >- >- [% IF bibitemloo.itemholdable %] >- <div id="copiesrow_[% bibitemloo.biblionumber | html %]" class="copiesrow"> >- <table class="table table-bordered table-striped itemstable"> >- <caption>Select a specific item:</caption> >- <thead> >- <tr> >- <th>Copy number</th> >- [% IF ( item_level_itypes ) %] >- <th>Item type</th> >- [% END %] >- <th>Barcode</th> >- [% UNLESS ( singleBranchMode ) %] >- <th>Home library</th> >- <th>Last location</th> >- [% END %] >- [% IF ( itemdata_ccode ) %] >- <th>Collection</th> >+ [% SET OPACShowHoldQueueDetails = Koha.Preference('OPACShowHoldQueueDetails') %] >+ [% IF OPACShowHoldQueueDetails == 'holds_priority' || OPACShowHoldQueueDetails == 'priority' %] >+ <li class="priority"> >+ <span class="label">Your priority: </span> >+ [% bibitemloo.rank | html %] >+ </li> >+ [% END %] >+ >+ [% IF OPACShowHoldQueueDetails == 'holds_priority' || OPACShowHoldQueueDetails == 'holds' %] >+ <li class="holds-count"> >+ <span class="label">Number of holds: </span> >+ [% bibitemloo.reservecount | html %] >+ </li> >+ [% END %] >+ >+ [% UNLESS ( singleBranchMode ) %] >+ [% IF ( bibitemloo.holdable && Koha.Preference('OPACAllowUserToChooseBranch')) %] >+ <li class="branch"> >+ <label for="branch_[% bibitemloo.biblionumber | html %]">Pick up location:</label> >+ [% UNLESS ( bibitemloo.holdable ) %] >+ <select name="branch" id="branch_[% bibitemloo.biblionumber | html %]" disabled="disabled"> >+ [% PROCESS options_for_libraries libraries => Branches.pickup_locations({ search_params => { biblio => bibitemloo.biblionumber, patron => logged_in_user }, selected => branch }) %] >+ </select> >+ [% ELSE %] >+ [% SET at_least_one_library_not_available_for_pickup = 0 %] >+ <select name="branch" id="branch_[% bibitemloo.biblionumber | html %]"> >+ [% FOREACH library IN Branches.pickup_locations({ search_params => { biblio => bibitemloo.biblionumber, patron => logged_in_user }, selected => branch }) %] >+ [% SET pickup_available_at = bibitemloo.not_available_at.grep('^' _ library.branchcode _ '$').size ? 0 : 1 %] >+ [% IF library.selected AND pickup_available_at %] >+ <option value="[% library.branchcode | html %]" selected="selected" >[% library.branchname | html %]</option> >+ [% ELSIF pickup_available_at %] >+ <option value="[% library.branchcode | html %]">[% library.branchname | html %]</option> >+ [% ELSE %] >+ [% SET at_least_one_library_not_available_for_pickup = 1 %] >+ <option value="[% library.branchcode | html %]" disabled="disabled" title="At least one item is available at this library">[% library.branchname | html %]</option> >+ [% END %] >+ [% END %] >+ </select> >+ [% IF at_least_one_library_not_available_for_pickup %] >+ <div class="at_least_one_library_not_available_note">Note: Library policy does not allow hold/pickup of an item available locally. Please come to the library to retrieve these items</div> >+ [% END %] >+ [% END # / UNLESS bibitemloo.holdable %] >+ </li> >+ [% END # / IF bibitemloo.holdable && Koha.Preference('OPACAllowUserToChooseBranch') %] >+ [% END # / UNLESS singleBranchMode %] >+ </ul> >+ >+ <a class="toggle-hold-options" id="toggle-hold-options-[% bibitemloo.biblionumber | html %]" style="display:none;" href="#">Show more options</a> >+ >+ <div id="hold-options-[% bibitemloo.biblionumber | html %]" class="hold-options"> >+ >+ <ul> >+ [% IF ( reserve_in_future ) %] >+ <li> >+ <label for="from[% bibitemloo.biblionumber | html %]">Hold starts on date:</label> >+ <input type="text" name="reserve_date_[% bibitemloo.biblionumber | html %]" id="from[% bibitemloo.biblionumber | html %]" data-start_for="to[% bibitemloo.biblionumber | html %]" data-flatpickr-futureinclusive="true" size="10" class="flatpickr holddatefrom" value="[% KohaDates.datetime_from_string | $KohaDates dateformat => 'iso' %]" /> >+ <span class="date-format from" data-biblionumber="[% bibitemloo.biblionumber | html %]">[% INCLUDE 'date-format.inc' %]</span> >+ <div class="required_label" style="display:none;">Required</div> >+ </li> > [% END %] >- <th>Call number</th> >- [% IF ( itemdata_enumchron ) %] >- <th>Vol info</th> >+ >+ <li> >+ <label for="to[% bibitemloo.biblionumber | html %]">Hold not needed after:</label> >+ <input type="text" name="expiration_date_[% bibitemloo.biblionumber | html %]" id="to[% bibitemloo.biblionumber | html %]" size="10" data-flatpickr-future="true" class="flatpickr futuredate" /> >+ <span class="date-format to" data-biblionumber="[% bibitemloo.biblionumber | html %]">[% INCLUDE 'date-format.inc' %]</span> >+ <div class="required_label" style="display:none;">Required</div> >+ </li> >+ >+ [% IF Koha.Preference('AllowHoldItemTypeSelection') %] >+ <li> >+ <label for="itemtype">Request specific item type:</label> >+ <select name="itemtype" id="itemtype"> >+ <option value="">Any item type</option> >+ [% FOREACH i IN bibitemloo.allowed_item_types %] >+ <option value="[% i | html %]">[% ItemTypes.GetDescription( i ) | html %]</option> >+ [%- END %] >+ </select> >+ </li> > [% END %] >- <th>Notes</th> >- <th>Information</th> >- </tr> >- </thead> >- <tbody> >- >- [% SET unholdable_items = 0 %] >- [% FOREACH itemLoo IN bibitemloo.itemLoop %] >- [% IF ( itemLoo.available ) %] >- [% IF ( itemLoo.checkout ) %] >- <tr class="holdable onloan"> >- [% ELSE %] >- <tr class="holdable"> >- [% END %] >- <td class="copynumber" data-order="[% itemLoo.copynumber | html %]"> >- <input type="[% reserve_input_type | html %]" class="checkitem checkitem_[% bibitemloo.biblionumber | html %]" name="checkitem_[% bibitemloo.biblionumber | html %]" value="[% itemLoo.itemnumber | html %]" /> >- [% ELSE %] >- [% SET unholdable_items = 1 %] >- [% IF ( itemLoo.checkout ) %] >- <tr class="unholdable onloan" style="display:none;"> >- [% ELSE %] >- <tr class="unholdable" style="display:none;"> >+ >+ [% UNLESS bibitemloo.forced_hold_level && ( bibitemloo.forced_hold_level == 'item' || bibitemloo.forced_hold_level == 'record' ) %] >+ [% IF Koha.Preference('EnableItemGroupHolds') && bibitemloo.object.item_groups.count %] >+ <li> >+ <label for="itemtype">Request specific item group:</label> >+ <select name="item_group_id_[% bibitemloo.biblionumber | html %]" id="item_group_id_[% bibitemloo.biblionumber | html %]"> >+ <option value="">Any item group</option> >+ [% FOREACH g IN bibitemloo.object.item_groups.search({}, { order_by => ['display_order'] }) %] >+ [% IF g.items.count %] >+ <option value="[% g.id | html %]">[% g.description | html %]</option> >+ [% END %] >+ [% END %] >+ </select> >+ </li> > [% END %] >- <td class="copynumber"> >- <input disabled="disabled" type="radio" aria-label="Cannot be put on hold" class="checkitem" name="checkitem" value="[% itemLoo.itemnumber | html %]" >- style="display:none;" /> >- <i class="fa fa-times danger" aria-hidden="true" title="Cannot be put on hold"></i> > [% END %] >- [% IF ( itemLoo.copynumber ) %] >- [% itemLoo.copynumber | html %] >- [% END %] >- </td> [%# copynumber %] > >- [% IF ( item_level_itypes ) %] >- <td class="itype"> >- [% UNLESS ( Koha.Preference('OpacNoItemTypeImages') ) %] >- [% IF ( itemLoo.imageurl ) %] >- <img class="itemtype-image" src="[% itemLoo.imageurl | html %]" alt="" /> >+ [% IF ( OpacHoldNotes ) %] >+ <li> >+ <div class="notesrow" id="notesrow_[% bibitemloo.biblionumber | html %]"> >+ <label for="holdnotes_[% bibitemloo.biblionumber | html %]">Hold notes:</label> >+ <textarea id="holdnotes_[% bibitemloo.biblionumber | html %]" rows="2" cols="30" name="notes_[% bibitemloo.biblionumber | html %]" >[% bibitemloo.holdnotes | html %]</textarea> >+ </div> >+ </li> >+ [% END # / IF OpacHoldNotes %] >+ >+ [% IF bibitemloo.itemholdable %] >+ <!-- ITEM HOLDS --> >+ <li class="lradio place_on_type" style="display:none;"> >+ [% UNLESS bibitemloo.forced_hold_level == 'item' || bibitemloo.forced_hold_level == 'item_group' || bibitemloo.force_hold %] >+ <label class="radio inline" for="reqany_[% bibitemloo.biblionumber | html %]">Next available item</label> >+ <input type="radio" name="reqtype_[% bibitemloo.biblionumber | html %]" >+ id="reqany_[% bibitemloo.biblionumber | html %]" >+ class="selectany" >+ value="Any" >+ checked="checked" >+ /> >+ [% END %] >+ <label class="radio inline" for="reqspecific_[% bibitemloo.biblionumber | html %]">A specific item</label> >+ <input type="radio" name="reqtype_[% bibitemloo.biblionumber | html %]" >+ id="reqspecific_[% bibitemloo.biblionumber | html %]" >+ class="selectspecific" >+ value="Specific" >+ /> >+ </li> >+ [% END # / IF bibitemloo.itemholdable %] >+ </ul> >+ >+ [% IF bibitemloo.itemholdable %] >+ <div id="copiesrow_[% bibitemloo.biblionumber | html %]" class="copiesrow"> >+ <table class="table table-bordered table-striped itemstable"> >+ <caption>Select a specific item:</caption> >+ <thead> >+ <tr> >+ <th>Copy number</th> >+ [% IF ( item_level_itypes ) %] >+ <th>Item type</th> >+ [% END %] >+ <th>Barcode</th> >+ [% UNLESS ( singleBranchMode ) %] >+ <th>Home library</th> >+ <th>Last location</th> >+ [% END %] >+ [% IF ( itemdata_ccode ) %] >+ <th>Collection</th> >+ [% END %] >+ <th>Call number</th> >+ [% IF ( itemdata_enumchron ) %] >+ <th>Vol info</th> >+ [% END %] >+ <th>Notes</th> >+ <th>Information</th> >+ </tr> >+ </thead> >+ <tbody> >+ >+ [% SET unholdable_items = 0 %] >+ [% FOREACH itemLoo IN bibitemloo.itemLoop %] >+ [% IF ( itemLoo.available ) %] >+ [% IF ( itemLoo.checkout ) %] >+ <tr class="holdable onloan"> >+ [% ELSE %] >+ <tr class="holdable"> >+ [% END %] >+ <td class="copynumber" data-order="[% itemLoo.copynumber | html %]"> >+ <input type="[% reserve_input_type | html %]" class="checkitem checkitem_[% bibitemloo.biblionumber | html %]" name="checkitem_[% bibitemloo.biblionumber | html %]" value="[% itemLoo.itemnumber | html %]" /> >+ [% ELSE %] >+ [% SET unholdable_items = 1 %] >+ [% IF ( itemLoo.checkout ) %] >+ <tr class="unholdable onloan" style="display:none;"> >+ [% ELSE %] >+ <tr class="unholdable" style="display:none;"> >+ [% END %] >+ <td class="copynumber"> >+ <input disabled="disabled" type="radio" aria-label="Cannot be put on hold" class="checkitem" name="checkitem" value="[% itemLoo.itemnumber | html %]" >+ style="display:none;" /> >+ <i class="fa fa-times danger" aria-hidden="true"></i> >+ [% END %] >+ [% IF ( itemLoo.copynumber ) %] >+ [% itemLoo.copynumber | html %] > [% END %] >+ </td> [%# copynumber %] >+ >+ [% IF ( item_level_itypes ) %] >+ <td class="itype"> >+ [% UNLESS ( Koha.Preference('OpacNoItemTypeImages') ) %] >+ [% IF ( itemLoo.imageurl ) %] >+ <img class="itemtype-image" src="[% itemLoo.imageurl | html %]" alt="" /> >+ [% END %] >+ [% END %] >+ <span class="itypetext">[% itemLoo.translated_description | html %]</span> >+ </td> > [% END %] >- <span class="itypetext">[% itemLoo.translated_description | html %]</span> >- </td> >- [% END %] > >- <td class="barcode">[% itemLoo.barcode | html %]</td> >- [% UNLESS ( singleBranchMode ) %] >- <td class="homebranch">[% Branches.GetName( itemLoo.homebranch) | html %]</td> >- <td class="holdingbranch">[% Branches.GetName( itemLoo.holdingbranch ) | html %]</td> >- [% END %] >- [% IF ( itemdata_ccode ) %] >- <td class="ccode"> [% IF ( itemLoo.ccode ) %][% AuthorisedValues.GetDescriptionByKohaField( kohafield => 'items.ccode', authorised_value => itemLoo.ccode, opac => 1 ) | html %][% END %]</td> >- [% END %] >- <td class="call_no">[% itemLoo.itemcallnumber | html %]</td> >- [% IF ( itemdata_enumchron ) %] >- <td class="vol_info">[% itemLoo.enumchron | html %]</td> >- [% END %] >- <td class="itemnotes"> >- [% itemLoo.itemnotes | html %] >- </td> >- <td class="information"> >- [% IF ( itemLoo.checkout.date_due) %] >- <span class="checkedout">Due [% itemLoo.checkout.date_due| $KohaDates as_due_date => 1 %]</span> >- [% ELSIF ( itemLoo.transfertwhen ) %] >- <span class="intransit">In transit from [% Branches.GetName( itemLoo.transfertfrom ) | html %] to [% Branches.GetName( itemLoo.transfertto ) | html %] since [% itemLoo.transfertwhen | $KohaDates %]</span> >- [% END %] >+ <td class="barcode">[% itemLoo.barcode | html %]</td> >+ [% UNLESS ( singleBranchMode ) %] >+ <td class="homebranch">[% Branches.GetName( itemLoo.homebranch) | html %]</td> >+ <td class="holdingbranch">[% Branches.GetName( itemLoo.holdingbranch ) | html %]</td> >+ [% END %] >+ [% IF ( itemdata_ccode ) %] >+ <td class="ccode"> [% IF ( itemLoo.ccode ) %][% AuthorisedValues.GetDescriptionByKohaField( kohafield => 'items.ccode', authorised_value => itemLoo.ccode, opac => 1 ) | html %][% END %]</td> >+ [% END %] >+ <td class="call_no">[% itemLoo.itemcallnumber | html %]</td> >+ [% IF ( itemdata_enumchron ) %] >+ <td class="vol_info">[% itemLoo.enumchron | html %]</td> >+ [% END %] >+ <td class="itemnotes"> >+ [% itemLoo.itemnotes | html %] >+ </td> >+ <td class="information"> >+ [% IF ( itemLoo.checkout.date_due) %] >+ <span class="checkedout">Due [% itemLoo.checkout.date_due| $KohaDates as_due_date => 1 %]</span> >+ [% ELSIF ( itemLoo.transfertwhen ) %] >+ <span class="intransit">In transit from [% Branches.GetName( itemLoo.transfertfrom ) | html %] to [% Branches.GetName( itemLoo.transfertto ) | html %] since [% itemLoo.transfertwhen | $KohaDates %]</span> >+ [% END %] > >- [% IF ( itemLoo.itemlost == 1 || itemLoo.itemlost == 2 ) %] [%# FIXME Why only for 1 or 2? Shouldn't we test for withdrawn as well? %] >- <span class="lost">Unavailable (lost or missing)</span> >- [% END %] >+ [% IF ( itemLoo.itemlost == 1 || itemLoo.itemlost == 2 ) %] [%# FIXME Why only for 1 or 2? Shouldn't we test for withdrawn as well? %] >+ <span class="lost">Unavailable (lost or missing)</span> >+ [% END %] > >- [% IF ( itemLoo.notforloan ) %] >- <span class="notforloan">Not for loan ([% AuthorisedValues.GetDescriptionByKohaField( kohafield => 'items.notforloan', authorised_value => itemLoo.notforloan ) %])</span> >- [% END %] >+ [% IF ( itemLoo.notforloan ) %] >+ <span class="notforloan">Not for loan ([% AuthorisedValues.GetDescriptionByKohaField( kohafield => 'items.notforloan', authorised_value => itemLoo.notforloan ) %])</span> >+ [% END %] > >- [% IF ( itemLoo.first_hold ) %] >- <span class="waiting"> >- [% IF ( itemLoo.waitingdate ) %] >- <span>Waiting for patron at [% Branches.GetName( itemLoo.ExpectedAtLibrary ) | html %] since [% itemLoo.waitingdate | $KohaDates %]</span> >- [% ELSIF ( itemLoo.reservedate ) %] >- <span>On hold for patron expected at [% Branches.GetName( itemLoo.ExpectedAtLibrary ) | html %] since [% itemLoo.reservedate | $KohaDates %]</span> >+ [% IF ( itemLoo.first_hold ) %] >+ <span class="waiting"> >+ [% IF ( itemLoo.waitingdate ) %] >+ <span>Waiting for patron at [% Branches.GetName( itemLoo.ExpectedAtLibrary ) | html %] since [% itemLoo.waitingdate | $KohaDates %]</span> >+ [% ELSIF ( itemLoo.reservedate ) %] >+ <span>On hold for patron expected at [% Branches.GetName( itemLoo.ExpectedAtLibrary ) | html %] since [% itemLoo.reservedate | $KohaDates %]</span> >+ [% ELSE %] >+ <span>On hold for patron expected at [% Branches.GetName( itemLoo.ExpectedAtLibrary ) | html %]</span> >+ [% END %] >+ </span> > [% ELSE %] >- <span>On hold for patron expected at [% Branches.GetName( itemLoo.ExpectedAtLibrary ) | html %]</span> >- [% END %] >- </span> >- [% ELSE %] >- <span class="notonhold">Not on hold</span> >- [% END # / IF ( itemLoo.first_hold )%] >- </td> >- </tr> >- [% END # / FOREACH itemLoo IN bibitemloo.itemLoop%] >- </tbody> >- </table> <!-- / #copiesrow_[% bibitemloo.biblionumber | html %] --> >- [% IF unholdable_items %] >- <button id="show_unholdable" class="btn btn-primary toggle_unholdable unholdable">Show unholdable items</button> >- <button id="hide_unholdable" class="btn btn-primary toggle_unholdable unholdable" style="display:none;">Hide unholdable items</button> >- [% END %] >- </div> >- [% END # / IF ( bibitemloo.itemholdable )%] >- </div> <!-- / #hold-options-[% bibitemloo.biblionumber | html %] --> >- </fieldset> >- [% END # / IF ( bibitemloo.holdable ) %] >- </div> <!-- / .holdrow --> >- [% END # / FOREACH bibitemloo IN bibitemloop %] >- </div><!-- #bigloop --> >- >- [% UNLESS ( none_available ) %] >- <input type="submit" value="Confirm hold" class="btn btn-primary placehold" /> >- [% END %] >- >- </form> >- [% END # / UNLESS message %] >+ <span class="notonhold">Not on hold</span> >+ [% END # / IF ( itemLoo.first_hold )%] >+ </td> >+ </tr> >+ [% END # / FOREACH itemLoo IN bibitemloo.itemLoop%] >+ </tbody> >+ </table> <!-- / #copiesrow_[% bibitemloo.biblionumber | html %] --> >+ [% IF unholdable_items %] >+ <button id="show_unholdable" class="btn btn-default toggle_unholdable unholdable">Show unholdable items</button> >+ <button id="hide_unholdable" class="btn btn-default toggle_unholdable unholdable" style="display:none;">Hide unholdable items</button> >+ [% END %] >+ </div> >+ [% END # / IF ( bibitemloo.itemholdable )%] >+ </div> <!-- / #hold-options-[% bibitemloo.biblionumber | html %] --> >+ </fieldset> >+ [% END # / IF ( bibitemloo.holdable ) %] >+ </fieldset> <!-- / .holdrow --> >+ [% END # / FOREACH bibitemloo IN bibitemloop %] >+ </div><!-- #bigloop --> >+ >+ [% UNLESS ( none_available ) %] >+ <input type="submit" value="Confirm hold" class="btn btn-primary placehold" /> >+ [% END %] >+ >+ </form> >+ [% END # / UNLESS message %] >+ </div> >+ </div> <!-- / .row --> > </div> <!-- / #holds --> > </div> <!-- / .container --> > </div> <!-- / .main --> >@@ -582,16 +594,11 @@ > // Replace non-JS single-selection with multi-selection capability. > $(".reserve_mode").val("multi"); > $(".confirm_nonjs").remove(); >+ > $(".confirmjs_hold").each(function(){ >- var bib = $(this).attr("title"); >+ var bib = $(this).data("biblionumber"); > var html = "<label><input type =\"checkbox\" class=\"confirmjs\" checked=\"checked\""; >- html += "value=\"" + bib + "\" id=\"" + bib + "\" /> " + _("Place a hold on") + " </label> "; >- $(this).html(html); >- }); >- $(".confirmjs_nohold").each(function(){ >- var bib = $(this).attr("title"); >- var html = "<label><input type =\"checkbox\" class=\"confirmjs\" disabled=\"disabled\""; >- html += "value=\"" + bib + "\" id=\"" + bib + "\" />" + _("Place a hold on: ") + "</label>"; >+ html += "value=\"" + bib + "\" id=\"" + bib + "\" /><span class=\"sr-only\">" + _("Select to place a hold on: ") + "</span></label> "; > $(this).html(html); > }); > >@@ -622,17 +629,18 @@ > > > // On confirmsjs change >- $(".confirmjs").change(function(){ >+ $(".confirmjs").on("change", function(){ > var id = suffixOf($(this).attr("id"), "_"); > // If I m checked, I enable radio buttons > if ( $(this).is(":checked") ) { >- $("#reqspecific_" + id).attr("disabled", false); >- $("#reqany_" + id).attr("disabled", false); >+ $("#holdrow_" + id ).attr("disabled", false).removeClass("disabled"); > } > // Else its are disabled > else { >- $("#reqspecific_" + id).attr("disabled", "disabled"); >- $("#reqany_" + id).attr("disabled", "disabled"); >+ $("#holdrow_" + id ).attr("disabled", "disabled").addClass("disabled"); >+ if( $("#hold-options-" + id ).is(":visible") ){ >+ $("#toggle-hold-options-" + id ).click(); >+ } > } > // expand or collaspe the items block > toggle_copiesrow(id); >-- >2.39.5
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 38635
:
175244
|
175247
|
175251
|
176037