Koha/koha-tmpl/intranet-tmpl/prog/en/modules/circ/pendingreserves.tt
Aleisha Amohia 3c75c48249 Bug 27803: Ensure publicationyear or copyrightdate shows in Holds to Pull
If marcflavour is set to MARC21, use biblio.copyrightdate. If
marcflavour is set to something other than MARC21, use
biblioitem.publicationyear. This is to match previous behaviour of this
feature.

To test:
1) Set your marcflavour system preferenece to MARC21.
2) Go to Administration -> Koha to MARC mapping to confirm what MARC tag
maps to biblio.copyrightdate.
3) In your terminal, run misc/batchRebuildBiblioTables.pl from the shell
to confirm the mapping is locked.
4) Edit a biblio, fill in whichever field is mapped to biblio.copyrightdate
and Save.
5) Place a hold on this biblio. (It must have an available item to allow
placing holds.)
6) Go to Circulation -> Holds to Pull.
7) Confirm your hold shows in the table with the copyrightdate.
8) Set your marcflavour system preference to something other thatn
MARC21.
9) Go to Administration -> Koha to MARC mapping to confirm what MARC tag
maps to biblioitem.publicationyear.
10) In your terminal, run misc/batchRebuildBiblioTables.pl from the shell
to confirm the mapping is locked.
11) Edit a biblio, fill in whichever field is mapped to biblioitem.publicationyear
and Save.
12) Place a hold on this biblio. (It must have an available item to allow
placing holds.)
13) Go to Circulation -> Holds to Pull.
14) Confirm your hold shows in the table with the publicationyear.

Sponsored-by: Catalyst IT
Signed-off-by: Petro Vashchuk <stalkernoid@gmail.com>
Signed-off-by: Joonas Kylmälä <joonas.kylmala@helsinki.fi>

Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org>

Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org>
2021-03-03 11:57:51 +01:00

337 lines
14 KiB
Text

[% USE raw %]
[% USE Asset %]
[% USE Koha %]
[% USE KohaDates %]
[% USE TablesSettings %]
[% USE AuthorisedValues %]
[%- USE Branches -%]
[%- USE ItemTypes -%]
[% SET footerjs = 1 %]
[% INCLUDE 'doc-head-open.inc' %]
<title>Koha &rsaquo; Circulation &rsaquo; Holds to pull</title>
[% INCLUDE 'doc-head-close.inc' %]
</head>
<body id="circ_pendingreserves" class="circ">
[% INCLUDE 'header.inc' %]
[% INCLUDE 'circ-search.inc' %]
<div id="breadcrumbs"><a href="/cgi-bin/koha/mainpage.pl">Home</a> &rsaquo; <a href="/cgi-bin/koha/circ/circulation-home.pl">Circulation</a> &rsaquo; Holds to pull</div>
<div class="main container-fluid">
<div class="row">
<div class="col-sm-10 col-sm-push-2">
<main>
[% FOR m IN messages %]
<div class="dialog [% m.type | html %]">
[% SWITCH m.code %]
[% CASE 'letter_enqueued' %]
<span>The notice has been correctly enqueued.</span>
[% CASE 'no_email_address' %]
<span>The patron does not have an email address defined.</span>
[% CASE 'no_template_notice' %]
<span>There is no notice template with a code 'CANCEL_HOLD_ON_LOST' defined in your system.</span>
[% CASE 'hold_cancelled' %]
<span>The hold has been correctly cancelled.</span>
[% CASE 'hold_placed_at_biblio_level' %]
<span>The hold has been placed on biblio level. It is not possible to determine the item to mark as lost.</span>
[% CASE %]
[% m.code | html %]
[% END %]
</div>
[% END %]
<h2>Holds to pull placed between [% from | $KohaDates %] and [% to | $KohaDates %]</h2>
<h3>Reported on [% todaysdate | $KohaDates %]</h3>
<p>The following holds have not been filled. Please retrieve them and check them in.</p>
<div id="searchresults">
[% IF holds_info %]
<table id="holdst">
<thead>
<tr>
<th>Pull this many items</th>
<th>Items available</th>
<th>Patrons with holds</th>
<th>First patron</th>
<th class="anti-the">Title</th>
<th class="string-sort">Libraries</th>
<th>Available barcodes</th>
<th>Available call numbers</th>
<th>Available copy numbers</th>
<th>Available enumeration</th>
<th class="string-sort">Available item types</th>
<th class="string-sort">Available locations</th>
<th class="title-string">Earliest hold date</th>
<th>Action</th>
</tr>
</thead>
<tbody>
[% FOREACH hold_info IN holds_info %]
<tr>
[% SET patron = hold_info.patron %]
[% SET item = hold_info.item %]
[% SET hold = hold_info.hold %]
[% IF patron %]
[% SET biblio = hold_info.biblio %]
<td><p><strong>[% hold_info.pull_count | html %]</strong></p></td>
<td>[% hold_info.items_count | html %]</td>
<td>[% hold_info.patrons_count | html %]</td>
<td><a href="/cgi-bin/koha/members/moremember.pl?borrowernumber=[% patron.borrowernumber | uri %]">[% patron.firstname | html %] [% patron.surname | html %]</a></td>
<td>
<p>
[% INCLUDE 'biblio-title.inc' biblio=biblio link = 1 %]
</p>
[% IF ( biblio.author ) %]<p> by [% biblio.author | html %]</p>[% END %]
[% IF ( biblio.biblioitem.editionstatement ) %]<p>[% biblio.biblioitem.editionstatement | html %]</p>[% END %]
[% IF ( Koha.Preference('marcflavour') == 'MARC21' ) %]
[% IF ( biblio.copyrightdate ) %]<p>[% biblio.copyrightdate | html %]</p>[% END %]
[% ELSE %]
[% IF ( biblio.biblioitem.publicationyear ) %]<p>[% biblio.biblioitem.publicationyear | html %]</p>[% END %]
[% END %]
</td>
[% ELSE %]
<td>"</td>
<td>"</td>
<td>"</td>
<td>"</td>
<td>"</td>
[% END %]
<td>
[% IF ( hold_info.holdingbranches.size ) %]
<ul>
[% FOREACH holdingbranch IN hold_info.holdingbranches %]
<li>[% Branches.GetName ( holdingbranch ) | html %]</li>
[% END %]
</ul>
[% END %]
</td>
<td>
[% IF ( hold_info.barcodes.size ) %]
[% SET barcode = hold_info.barcodes.first %]
[% IF ( hold_info.itemnumber ) %]Only [% barcode | html %][% ELSE %][% barcode | html %] or any available.[% END %]
[% END %]
</td>
<td>
[% IF ( hold_info.callnumbers.size ) %]
<ul>
[% FOREACH callnumber IN hold_info.callnumbers %]
<li>
[% callnumber | html %]
</li>
[% END %]
</ul>
[% END %]
</td>
<td>
[% IF ( hold_info.copynumbers.size ) %]
<ul>
[% FOREACH copyno IN hold_info.copynumbers %]
<li>
[% copyno | html %]
</li>
[% END %]
</ul>
[% END %]
</td>
<td>
[% IF ( hold_info.enumchrons.size ) %]
<ul>
[% FOREACH enumchron IN hold_info.enumchrons %]
<li>
[% enumchron | html %]
</li>
[% END %]
</ul>
[% END %]
</td>
<td>
<ul>
[% FOREACH type IN hold_info.itemtypes %]
<li>[% ItemTypes.GetDescription( type ) | html %]</li>
[% END %]
</ul>
</td>
<td>
<ul>
[% FOREACH loc IN hold_info.locations %]
<li>[% AuthorisedValues.GetDescriptionByKohaField( kohafield => 'items.location', authorised_value => loc ) | html %]</li>
[% END %]
</ul>
</td>
<td>
<span title="[% hold.reservedate | html %]">[% hold.reservedate | $KohaDates %] in [% Branches.GetName ( hold.branchcode ) | html %]</span>
</td>
<td>
<form name="cancelReserve" action="/cgi-bin/koha/circ/pendingreserves.pl" method="post">
<input type="hidden" name="op" value="cancel_reserve" />
<input type="hidden" name="reserve_id" value="[% hold.reserve_id | html %]" />
[% SET hold_cancellation = AuthorisedValues.GetAuthValueDropbox('HOLD_CANCELLATION') %]
[% IF hold_cancellation %]
<div class="form-group">
<label for="cancellation-reason">Cancellation reason:</label>
<select class="cancellation-reason" name="cancellation-reason" id="cancellation-reason">
<option value="">No reason given</option>
[% FOREACH reason IN hold_cancellation %]
<option value="[% reason.authorised_value | html %]">[% reason.lib | html %]</option>
[% END %]
</select>
</div>
[% END %]
[% IF item.holdingbranch != item.homebranch %]
<input class="btn btn-default" type="submit" value="Cancel hold and return to : [% Branches.GetName( item.homebranch ) | html %]" />
[% ELSE %]
<input class="btn btn-default" type="submit" value="Cancel hold" />
[% END %]
</form>
[% IF Koha.Preference('CanMarkHoldsToPullAsLost') != 'do_not_allow' %]
[% IF hold.itemnumber %]
<form name="cancelReserve" action="/cgi-bin/koha/circ/pendingreserves.pl" method="post">
<input type="hidden" name="reserve_id" value="[% hold.reserve_id | html %]" />
[% IF Koha.Preference('CanMarkHoldsToPullAsLost') == 'allow' %]
<input type="hidden" name="op" value="mark_as_lost" />
<input type="submit" value="Mark item as lost" />
[% ELSIF Koha.Preference('CanMarkHoldsToPullAsLost') == 'allow_and_notify' %]
<input type="hidden" name="op" value="mark_as_lost_and_notify" />
<input type="submit" value="Mark lost and notify patron" />
[% END %]
</form>
[% ELSE %]
<span>Biblio level hold.</span>
[% END %]
[% END %]
</td>
</tr>
[% END %]
</tbody>
<tfoot>
<tr>
<td><input type="text" class="filter" data-column_num="0" placeholder="Pull this many items" style="width:95%"/></td>
<td><input type="text" class="filter" data-column_num="1" placeholder="Items available" style="width:95%"/></td>
<td><input type="text" class="filter" data-column_num="2" placeholder="Patron holds" style="width:95%"/></td>
<td><input type="text" class="filter" data-column_num="3" placeholder="Patron name" style="width:95%"/></td>
<td><input type="text" class="filter" data-column_num="4" placeholder="Title" style="width:95%"/></td>
<td id="homebranchfilter"></td>
<td></td>
<td><input type="text" class="filter" data-column_num="7" placeholder="Call number" style="width:95%"/></td>
<td><input type="text" class="filter" data-column_num="8" placeholder="Available copy" style="width:95%"/></td>
<td><input type="text" class="filter" data-column_num="9" placeholder="Available enumeration" style="width:95%"/></td>
<td id="itemtype-filter"></td>
<td id="locationfilter"></td>
<td></td>
<td></td>
</tr>
</tfoot>
</table>
[% ELSE %]
<strong>No items found.</strong>
[% END %]
</div>
</main>
</div> <!-- /.col-sm-10.col-sm-push-2 -->
<div class="col-sm-2 col-sm-pull-10">
<aside>
<div id="filters">
<form action="/cgi-bin/koha/circ/pendingreserves.pl" method="post" >
<fieldset class="brief">
<h4>Refine results</h4>
<ol>
<li>
<label for="from">
Start date:
</label>
<input type="text" size="10" id="from" name="from" value="[% from | $KohaDates %]" class="datepickerfrom" />
</li>
<li><label for="to">
End date:
</label>
<input type="text" size="10" id="to" name="to" value="[% to | $KohaDates %]" class="datepickerto" />
</li>
</ol>
[% IF ( HoldsToPullEndDate ) %]
<p><em>(Inclusive, default is [% HoldsToPullStartDate | html %] days ago to [% HoldsToPullEndDate | html %] days ahead. Set other date ranges as needed.)</em></p>
[% ELSE %]
<p><em>(Inclusive, default is [% HoldsToPullStartDate | html %] days ago to today. Set other date ranges as needed.)</em></p>
[% END %]
<fieldset class="action"><input type="submit" name="run_report" value="Submit" class="submit"/></fieldset>
</fieldset>
</form>
</div>
</aside>
</div> <!-- /.col-sm-2.col-sm-pull-10 -->
</div> <!-- /.row -->
[% MACRO jsinclude BLOCK %]
[% INCLUDE 'calendar.inc' %]
[% INCLUDE 'datatables.inc' %]
[% INCLUDE 'columns_settings.inc' %]
<script>
$(document).ready(function() {
var columns_settings = [% TablesSettings.GetColumns('circ', 'holds', 'holds-to-pull', 'json') | $raw %];
var holdst = KohaTable("holdst", {
"sPaginationType": "full_numbers"
}, columns_settings);
holdst.fnAddFilters("filter");
[%# add separateData function to cleanse jQuery select lists by breaking apart strings glued with BR tags and then de-duplicating any repeated library codes %]
function separateData ( ColumnData ){
var cD = ColumnData;
var new_array = new Array();
for ( j=0 ; j<cD.length ; j++ ) {
var split_array = cD[j].split(/\n/gi);
for ( k=0 ; k<split_array.length ; k++ ){
var str = $.trim(split_array[k].replace(/[\n\r]/g, ''));
if ($.inArray(str, new_array) == -1 && str.length > 0 ) {
new_array.push(str);
}
}
}
new_array.sort();
return new_array;
}
[%# add SeparateData function into createSelect function, so that it does the createSelect on clean data %]
function createSelect( data ) {
data = separateData(data);
var r='<select style="width:99%"><option value="">' + _("None") + '</option>', i, len=data.length;
var regex = /(<([^>]+)>)/ig; // Remove html tags
for ( i=0 ; i<len ; i++ ) {
var cell_val = data[i].replace(regex, '');
if ( cell_val.length < 1 ) continue;
r += '<option value="'+cell_val+'">'+cell_val+'</option>';
}
return r+'</select>';
}
$("#homebranchfilter").each( function () {
$(this).html( createSelect( holdst.fnGetColumnData(5) ) );
$('select', this).change( function () {
holdst.fnFilter( $(this).val(), 5 );
});
});
$("#itemtype-filter").each( function () {
$(this).html( createSelect( holdst.fnGetColumnData(10) ) );
$('select', this).change( function () {
holdst.fnFilter( $(this).val(), 10 );
});
});
$("#locationfilter").each( function () {
$(this).html( createSelect( holdst.fnGetColumnData(11) ) );
$('select', this).change( function () {
holdst.fnFilter( $(this).val(), 11 );
});
});
});
</script>
[% END %]
[% INCLUDE 'intranet-bottom.inc' %]