580c390bda
This feature allows a patron to add bibliographic records to course reserves. They can be added individually or in a batch. The courses that have reserved this record will also show on the record's detail page. To test: 1) Update database, refresh schema, and restart services 2) Enable the system preference UseCourseReserves 3) Set up a couple of biblios and a couple of items (attached to different biblios) 4) Go to Course Reserves and add a new course 5) Click Add reserves and put something in both the barcode field and biblionumber field. Click submit and confirm you get an error. 6) Add a barcode in the barcode field and submit. Confirm the item is reserved for the course as expected. 7) Add a biblionumber in the barcode field and submit. Add notes and Save. Confirm the record is reserved for the course as expected and the notes are saved correctly. 8) Edit the record-level course reserve that you just added. Confirm the correct record shows and any edits save as expected. 9) Go back to the course and try removing reserves. Use both the Remove action button for individual reserves and the Remove all reserves button. Confirm both work as expected. 10) Go to Batch add reserves and put something in both the barcodes field and biblionumbers field. Click submit and confirm you get an error. 11) Remove the barcodes and put some biblionumbers in the biblionumbers field. Add notes and Submit. Confirm the records are all added as expected. 12) Click on one of the biblios that has been reserved for the course. Confirm that the course shows under 'Courses that have reserved this title' on the biblio detail page. 13) Go back to the course and click Add reserves. Try and add a biblionumber that is already reserved. Confirm it detects that the biblio has already been reserved. Sponsored-by: Bibliotheksservice-Zentrum Baden-Württemberg (BSZ) Signed-off-by: Christian Stelzenmüller <christian.stelzenmueller@bsz-bw.de> Signed-off-by: Kyle M Hall <kyle@bywatersolutions.com> Signed-off-by: Nick Clemens <nick@bywatersolutions.com> Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org>
336 lines
19 KiB
Text
336 lines
19 KiB
Text
[% USE raw %]
|
|
[% USE Asset %]
|
|
[% USE AuthorisedValues %]
|
|
[% USE ItemTypes %]
|
|
[% USE Branches %]
|
|
[% USE TablesSettings %]
|
|
[% SET footerjs = 1 %]
|
|
[% INCLUDE 'doc-head-open.inc' %]
|
|
<title>Course details for [% course.course_name | html %] › Course reserves › Koha</title>
|
|
[% INCLUDE 'doc-head-close.inc' %]
|
|
|
|
<style>
|
|
#instructors {
|
|
float: left;
|
|
}
|
|
.instructor_line {
|
|
padding: 0 .1em;
|
|
}
|
|
</style>
|
|
</head>
|
|
|
|
<body id="courses_course_details" class="course">
|
|
|
|
[% INCLUDE 'header.inc' %]
|
|
[% INCLUDE 'cat-search.inc' %]
|
|
|
|
<nav id="breadcrumbs" aria-label="Breadcrumb" class="breadcrumb">
|
|
<ol>
|
|
<li>
|
|
<a href="/cgi-bin/koha/mainpage.pl">Home</a>
|
|
</li>
|
|
<li>
|
|
<a href="/cgi-bin/koha/course_reserves/course-reserves.pl">Course reserves</a>
|
|
</li>
|
|
<li>
|
|
<a href="#" aria-current="page">
|
|
Course details for <em>[% course.course_name | html %]</em>
|
|
</a>
|
|
</li>
|
|
</ol>
|
|
</nav>
|
|
|
|
<div class="main container-fluid">
|
|
<div class="row">
|
|
<div class="col-md-10 col-md-offset-1">
|
|
|
|
[% IF CAN_user_coursereserves_add_reserves OR CAN_user_coursereserves_manage_courses OR CAN_user_coursereserves_manage_courses %]
|
|
<div id="toolbar">
|
|
[% IF CAN_user_coursereserves_add_reserves %]
|
|
<a class="btn btn-default" id="add_items" href="/cgi-bin/koha/course_reserves/add_items.pl?course_id=[% course.course_id | html %]"><i class="fa fa-plus"></i> Add reserves</a>
|
|
<a class="btn btn-default" id="add_items" href="/cgi-bin/koha/course_reserves/batch_add_items.pl?course_id=[% course.course_id | html %]"><i class="fa fa-plus"></i> Batch add reserves</a>
|
|
[% END %]
|
|
[% IF CAN_user_coursereserves_delete_reserves && course_reserves %]
|
|
<a class="btn btn-default" id="rm_items" href="/cgi-bin/koha/course_reserves/course-details.pl?course_id=[% course.course_id | html %]&action=rm_all"><i class="fa fa-minus"></i> Remove all reserves</a>
|
|
[% END %]
|
|
[% IF ( CAN_user_coursereserves_manage_courses ) %]
|
|
<a class="btn btn-default" id="edit_course" href="/cgi-bin/koha/course_reserves/course.pl?course_id=[% course.course_id | html %]"><i class="fa fa-pencil"></i> Edit course</a>
|
|
[% END %]
|
|
[% IF ( CAN_user_coursereserves_manage_courses ) %]
|
|
<a class="btn btn-default" id="delete_course" href="/cgi-bin/koha/course_reserves/mod_course.pl?course_id=[% course.course_id | html %]&action=del"><i class="fa fa-trash"></i> Delete course</a>
|
|
[% END %]
|
|
</div><!-- /toolbar -->
|
|
[% END %]
|
|
|
|
<div class="rows">
|
|
<ol>
|
|
<li><span class="label">Course name</span> [% course.course_name | html %]</li>
|
|
<li><span class="label">Term</span> [% AuthorisedValues.GetByCode( 'TERM', course.term ) | html %]</li>
|
|
<li><span class="label">Department</span> [% AuthorisedValues.GetByCode( 'DEPARTMENT', course.department ) | html %]</li>
|
|
<li><span class="label">Course number</span> [% course.course_number | html %]</li>
|
|
<li><span class="label">Section</span> [% course.section | html %]</li>
|
|
<li>
|
|
<span class="label">Instructors</span>
|
|
<div id="instructors">
|
|
[% FOREACH i IN course.instructors %]
|
|
<div class="instructor_line">
|
|
<a href="/cgi-bin/koha/members/moremember.pl?borrowernumber=[% i.borrowernumber | uri %]">[% i.firstname | html %] [% i.surname | html %]</a>
|
|
</div>
|
|
[% END %]
|
|
</div>
|
|
</li>
|
|
<li><span class="label">Staff note</span> [% course.staff_note | html %]</li>
|
|
<li><span class="label">Public note</span> [% course.public_note | $raw %]</li>
|
|
<li><span class="label">Student count</span> [% course.students_count | html %]</li>
|
|
<li><span class="label">Status</span> [% IF course.enabled == 'yes' %]Active[% ELSE %]Inactive[% END %]</li>
|
|
</ol>
|
|
</div>
|
|
|
|
[% IF course_reserves %]
|
|
<h1>Reserves</h1>
|
|
<table id="course_reserves_table">
|
|
<thead>
|
|
<tr>
|
|
<th class="anti-the">Title</th>
|
|
<th>Author</th>
|
|
<th>Barcode</th>
|
|
<th>Call number</th>
|
|
[% IF item_level_itypes %]<th>Item type</th>[% END %]
|
|
<th>Collection</th>
|
|
<th>Location</th>
|
|
<th>Home library</th>
|
|
<th>Holding library</th>
|
|
<th>Staff note</th>
|
|
<th>Public note</th>
|
|
<th>Link</th>
|
|
<th class="NoSort">Other course reserves</th>
|
|
<th>Status</th>
|
|
[% IF CAN_user_coursereserves_add_reserves || CAN_user_coursereserves_delete_reserves %]
|
|
<th class="NoSort noExport">Actions</th>
|
|
[% END %]
|
|
</tr>
|
|
</thead>
|
|
|
|
<tbody>
|
|
[% FOREACH cr IN course_reserves %]
|
|
<tr>
|
|
<td><a href="/cgi-bin/koha/catalogue/detail.pl?biblionumber=[% cr.biblio.biblionumber | uri %]">[% INCLUDE 'biblio-title.inc' biblio=cr.biblio %]</a></td>
|
|
<td>[% cr.biblio.author | html %]</td>
|
|
|
|
[% IF cr.item %]
|
|
<td><a href="/cgi-bin/koha/catalogue/moredetail.pl?itemnumber=[% cr.item.itemnumber | uri %]&biblionumber=[% cr.biblio.biblionumber | uri %]&bi=[% cr.biblioitem.biblioitemnumber | uri %]">[% cr.item.barcode | html %]</a></td>
|
|
<td>[% cr.item.itemcallnumber | html %]</td>
|
|
[% IF item_level_itypes %]
|
|
<td>
|
|
[% IF cr.course_item.itype_enabled %]
|
|
[% IF cr.course_item.enabled == 'yes' %]
|
|
<strong>[% ItemTypes.GetDescription( cr.item.effective_itemtype ) | html %]</strong>
|
|
([% ItemTypes.GetDescription( cr.course_item.itype_storage ) | html %])
|
|
[% ELSE %]
|
|
[% ItemTypes.GetDescription( cr.course_item.itype ) | html %]
|
|
(<strong>[% ItemTypes.GetDescription( cr.item.effective_itemtype) | html %]</strong>)
|
|
[% END %]
|
|
[% ELSE %]
|
|
<em>Unchanged</em>
|
|
[% IF cr.item.itype %]
|
|
([% ItemTypes.GetDescription( cr.item.itype ) | html %])
|
|
[% END %]
|
|
[% END %]
|
|
</td>
|
|
[% END %]
|
|
<td>
|
|
[% IF cr.course_item.ccode_enabled %]
|
|
[% IF cr.course_item.enabled == 'yes' %]
|
|
<strong>[% AuthorisedValues.GetDescriptionByKohaField( kohafield => 'items.ccode', authorised_value => cr.item.ccode ) | html %]</strong>
|
|
[% IF cr.item.ccode %]
|
|
([% AuthorisedValues.GetDescriptionByKohaField( kohafield => 'items.ccode', authorised_value => cr.course_item.ccode_storage ) | html %])
|
|
[% END %]
|
|
[% ELSE %]
|
|
[% AuthorisedValues.GetDescriptionByKohaField( kohafield => 'items.ccode', authorised_value => cr.course_item.ccode ) | html %]
|
|
[% IF cr.item.ccode %]
|
|
(<strong>[% AuthorisedValues.GetDescriptionByKohaField( kohafield => 'items.ccode', authorised_value => cr.item.ccode ) | html %]</strong>)
|
|
[% END %]
|
|
[% END %]
|
|
[% ELSE %]
|
|
<em>Unchanged</em>
|
|
[% IF cr.item.ccode %]
|
|
([% AuthorisedValues.GetDescriptionByKohaField( kohafield => 'items.ccode', authorised_value => cr.item.ccode ) | html %])
|
|
[% END %]
|
|
[% END %]
|
|
</td>
|
|
<td>
|
|
[% IF cr.course_item.location_enabled %]
|
|
[% IF cr.course_item.enabled == 'yes' %]
|
|
<strong>[% AuthorisedValues.GetByCode( 'LOC', cr.item.permanent_location ) | html %]</strong>
|
|
[% IF cr.item.permanent_location %]
|
|
([% AuthorisedValues.GetByCode( 'LOC', cr.course_item.location_storage ) | html %])
|
|
[% END %]
|
|
[% ELSE %]
|
|
[% AuthorisedValues.GetByCode( 'LOC', cr.course_item.location ) | html %]
|
|
[% IF cr.item.permanent_location %]
|
|
(<strong>[% AuthorisedValues.GetByCode( 'LOC', cr.item.permanent_location ) | html %]</strong>)
|
|
[% END %]
|
|
[% END %]
|
|
[% ELSE %]
|
|
<em>Unchanged</em>
|
|
[% IF cr.item.permanent_location %]
|
|
([% AuthorisedValues.GetByCode( 'LOC', cr.item.permanent_location ) | html %])
|
|
[% END %]
|
|
[% END %]
|
|
</td>
|
|
<td>
|
|
[% IF cr.course_item.homebranch_enabled %]
|
|
[% IF cr.course_item.enabled == 'yes' %]
|
|
<strong>[% Branches.GetName( cr.item.homebranch ) | html %]</strong>
|
|
[% IF cr.item.homebranch %]
|
|
([% Branches.GetName( cr.course_item.homebranch_storage ) | html %])
|
|
[% END %]
|
|
[% ELSE %]
|
|
[% Branches.GetName( cr.course_item.homebranch ) | html %]
|
|
[% IF cr.item.homebranch %]
|
|
(<strong>[% Branches.GetName( cr.item.homebranch ) | html %]</strong>)
|
|
[% END %]
|
|
[% END %]
|
|
[% ELSE %]
|
|
<em>Unchanged</em>
|
|
[% IF cr.item.homebranch %]
|
|
([% Branches.GetName( cr.item.homebranch ) | html %])
|
|
[% END %]
|
|
[% END %]
|
|
</td>
|
|
<td>
|
|
[% IF cr.course_item.holdingbranch_enabled %]
|
|
[% IF cr.course_item.enabled == 'yes' %]
|
|
<strong>[% Branches.GetName( cr.item.holdingbranch ) | html %]</strong>
|
|
[% IF cr.item.holdingbranch %]
|
|
([% Branches.GetName( cr.course_item.holdingbranch_storage ) | html %])
|
|
[% END %]
|
|
[% ELSE %]
|
|
[% Branches.GetName( cr.course_item.holdingbranch ) | html %]
|
|
[% IF cr.item.holdingbranch %]
|
|
(<strong>[% Branches.GetName( cr.item.holdingbranch ) | html %]</strong>)
|
|
[% END %]
|
|
[% END %]
|
|
[% ELSE %]
|
|
<em>Unchanged</em>
|
|
[% IF cr.item.holdingbranch %]
|
|
([% Branches.GetName( cr.item.holdingbranch ) | html %])
|
|
[% END %]
|
|
[% END %]
|
|
</td>
|
|
[% ELSE # record-level course reserve %]
|
|
[% IF ( item_level_itypes ) %]
|
|
<td colspan="7">
|
|
[% ELSE %]
|
|
<td colspan="6">
|
|
[% END %]
|
|
<em>Information not available for record-level course reserve</em>
|
|
</td>
|
|
[% END %]
|
|
|
|
<td>[% IF (cr.staff_note) %]
|
|
[% cr.staff_note | html %]
|
|
[% ELSIF (cr.item.itemnotes_nonpublic) %]
|
|
[% cr.item.itemnotes_nonpublic | html %]
|
|
[% END %]
|
|
</td>
|
|
<td>[% IF (cr.public_note) %]
|
|
[% cr.public_note | $raw %]
|
|
[% ELSIF (cr.item.itemnotes) %]
|
|
[% cr.item.itemnotes | $raw %]
|
|
[% END %]
|
|
</td>
|
|
|
|
<td>
|
|
[% IF (cr.item.uri) %]
|
|
<a href="[% cr.item.uri | url %]">Item URI</a>
|
|
[% ELSIF (cr.biblioitem.url) %]
|
|
<a href="[% cr.biblioitem.url | url %]">Record URL</a>
|
|
[% END %]
|
|
</td>
|
|
|
|
<td>
|
|
[% FOREACH c IN cr.courses %]
|
|
[% UNLESS cr.course_id == c.course_id %]
|
|
<p>
|
|
<a href="course-details.pl?course_id=[% c.course_id | uri %]">
|
|
[% c.course_name | html %]
|
|
[% IF c.section %] [% c.section | html %] [% END %]
|
|
[% IF c.term %] [% AuthorisedValues.GetByCode( 'TERM', c.term ) | html %] [% END %]
|
|
</a>
|
|
</p>
|
|
[% END %]
|
|
[% END %]
|
|
</td>
|
|
|
|
<td class="status">
|
|
<span>
|
|
[% IF cr.item.onloan %]
|
|
Checked out
|
|
[% ELSE %]
|
|
Available
|
|
[% END %]
|
|
</span>
|
|
</td>
|
|
|
|
[% IF CAN_user_coursereserves_add_reserves || CAN_user_coursereserves_delete_reserves %]
|
|
<td class="actions">
|
|
[% IF CAN_user_coursereserves_add_reserves %]
|
|
<a class="btn btn-default btn-xs" href="add_items.pl?course_id=[% course.course_id | html %]&itemnumber=[% cr.item.itemnumber | html %]&biblionumber=[% cr.biblio.biblionumber | html %]&action=lookup&return=[% course.course_id | html %]&is_edit=1"><i class="fa fa-pencil"></i> Edit</a>
|
|
[% END %]
|
|
|
|
[% IF CAN_user_coursereserves_delete_reserves %]
|
|
<a class="btn btn-default btn-xs delete_item" href="course-details.pl?course_id=[% course.course_id | html %]&action=del_reserve&cr_id=[% cr.cr_id | html %]">
|
|
<i class="fa fa-trash"></i> Remove</a>
|
|
[% END %]
|
|
</td>
|
|
[% END %]
|
|
|
|
</tr>
|
|
[% END %]
|
|
</tbody>
|
|
</table>
|
|
[% END %]
|
|
</div>
|
|
</div>
|
|
|
|
[% MACRO jsinclude BLOCK %]
|
|
[% INCLUDE 'datatables.inc' %]
|
|
[% INCLUDE 'columns_settings.inc' %]
|
|
<script>
|
|
var columns_settings = [% TablesSettings.GetColumns( 'coursereserves', 'reserves', 'course_reserves_table', 'json' ) | $raw %];
|
|
$(document).ready(function(){
|
|
var rtable = KohaTable("course_reserves_table", {
|
|
"sPaginationType": "full",
|
|
"bAutoWidth": false,
|
|
}, columns_settings );
|
|
|
|
$(".delete_item").click(function(){
|
|
return confirmDelete(_("Are you sure you want to remove this item from the course?"));
|
|
});
|
|
|
|
$("#rm_items").click(function(){
|
|
return confirmDelete(_("Are you sure you want to remove all items from the course?"));
|
|
});
|
|
|
|
$("#delete_course").click(function(){
|
|
[% SET count = course_reserves.size || 0 %]
|
|
[% IF count == 1 %]
|
|
return confirmDelete(_("Are you sure you want to delete this course? There is %s attached item.").format([% count | html %]) );
|
|
[% ELSIF count > 1 %]
|
|
return confirmDelete(_("Are you sure you want to delete this course? There are %s attached items.").format([% count | html %]) );
|
|
[% ELSE %]
|
|
return confirmDelete(_("Are you sure you want to delete this course?"));
|
|
[% END %]
|
|
});
|
|
$(".disabled").tooltip().on("click", function(e){
|
|
e.preventDefault();
|
|
if( $(this).hasClass("checkedout") ){
|
|
alert(_("This item cannot be removed. It is checked out"));
|
|
}
|
|
});
|
|
});
|
|
</script>
|
|
[% END %]
|
|
|
|
[% INCLUDE 'intranet-bottom.inc' %]
|