Victor Grousset/tuxayo
7758a0248e
And a few minor fixes when they where causing issues for translatability. And rephrased a string about password reset to have it identical to other strings with the same meaning. Simplified via wrapping strings with <span> to split to huge concatenated strings with a lot of %s everywhere. == Test plan == This patch needs mainly proof reading. Still it's possible to do some basic testing to demonstrate that adding a <span> in an IF doesn't break anything. Pick in one of the 110 modified templates a string that you know how to display. Otherwise: 1. acquisitions => vendor => basket => add to basket => search "from existing record" => add order 2. Cancel the order 3. You see without issue "Bibliographic record will not be deleted" 4. administration => Patron categories 5. Try to delete a used and unused category 6. You see as expected Category XXXX is in use. Deletion not possible! and Confirm deletion of category XXXX Signed-off-by: Fridolin Somers <fridolin.somers@biblibre.com> Signed-off-by: Paul Derscheid <paul.derscheid@lmscloud.de> Signed-off-by: Fridolin Somers <fridolin.somers@biblibre.com> Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
443 lines
24 KiB
Text
443 lines
24 KiB
Text
[% USE raw %]
|
||
[% USE Asset %]
|
||
[% USE Context %]
|
||
[% USE KohaDates %]
|
||
[% USE Branches %]
|
||
[% USE Categories %]
|
||
[% USE ItemTypes %]
|
||
[% USE AuthorisedValues %]
|
||
[% USE Price %]
|
||
[% SET footerjs = 1 %]
|
||
[% SET article_requests_view = 1 %]
|
||
[% SET biblionumber = biblio.biblionumber %]
|
||
[% INCLUDE 'doc-head-open.inc' %]
|
||
[% SET libraries = Branches.all %]
|
||
[% SET categories = Categories.all.unblessed %]
|
||
[% SET columns = ['name', 'address', 'cardnumber', 'dateofbirth', 'category', 'branch', 'phone'] %]
|
||
[% PROCESS "patron-search.inc" %]
|
||
<title>Request article › Circulation › Koha</title>
|
||
[% INCLUDE 'doc-head-close.inc' %]
|
||
</head>
|
||
|
||
[% BLOCK cancel_modal %]
|
||
<div id="cancelModal" class="modal" tabindex="-1" role="dialog" aria-hidden="true">
|
||
<div class="modal-dialog" role="document">
|
||
<div class="modal-content">
|
||
<div class="modal-header">
|
||
<button type="button" class="closebtn" data-dismiss="modal" aria-hidden="true">×</button>
|
||
<h3>Confirm deletion</h3>
|
||
</div>
|
||
|
||
<div class="modal-body">
|
||
<p>Are you sure you want to cancel this article request?</p>
|
||
|
||
<fieldset class="action">
|
||
[% SET ar_cancellation = AuthorisedValues.GetAuthValueDropbox('AR_CANCELLATION') %]
|
||
[% IF ar_cancellation.count %]
|
||
<label for="cancellation-reason" class="col-sm-4">Cancellation reason: </label>
|
||
<select class="cancellation-reason col-sm-8" name="cancellation-reason" id="modal-cancellation-reason">
|
||
<option value="" selected>Other reasons</option>
|
||
[% FOREACH reason IN ar_cancellation %]
|
||
<option value="[% reason.authorised_value | html %]">[% reason.lib | html %]</option>
|
||
[% END %]
|
||
</select>
|
||
[% END %]
|
||
</fieldset>
|
||
<fieldset class="action">
|
||
<div class="hint col-sm-offset-4">Enter reason</div>
|
||
<input type="text" class="notes col-sm-offset-4 col-sm-8" name="notes" id="modal-notes"/>
|
||
</fieldset>
|
||
</div>
|
||
|
||
<div class="modal-footer">
|
||
<button id="cancelModalConfirmBtn" type="button" class="btn btn-danger" data-dismiss="modal">Confirm cancellation</button>
|
||
<a href="#" data-dismiss="modal">Cancel</a>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
[% END %]
|
||
|
||
<body id="circ_request-article" class="circ">
|
||
[% INCLUDE 'header.inc' %]
|
||
[% INCLUDE 'circ-search.inc' %]
|
||
|
||
<nav id="breadcrumbs" aria-label="Breadcrumb" class="breadcrumb">
|
||
<ol>
|
||
<li>
|
||
<a href="/cgi-bin/koha/mainpage.pl">Home</a>
|
||
</li>
|
||
|
||
[% IF blocking_error %]
|
||
<li>
|
||
<a href="#" aria-current="page">
|
||
Catalog
|
||
</a>
|
||
</li>
|
||
|
||
[% ELSE %]
|
||
[% INCLUDE 'biblio-title.inc' link = 1 %]
|
||
<li>
|
||
<a href="#" aria-current="page">
|
||
Request article
|
||
</a>
|
||
</li>
|
||
[% END %]
|
||
</ol>
|
||
</nav>
|
||
|
||
[% INCLUDE 'blocking_errors.inc' %]
|
||
<div class="main container-fluid">
|
||
<div class="row">
|
||
<div class="col-sm-10 col-sm-push-2">
|
||
<main>
|
||
|
||
<h1>Request article from [% INCLUDE 'biblio-title.inc' link = 1 %]</h1>
|
||
[% IF error_message %]
|
||
<div class="dialog alert">
|
||
[% SWITCH error_message %]
|
||
[% CASE 'article_request_limit_reached' %]<p>Patron reached daily limit.</p>
|
||
[% CASE 'article_request_unhandled_exception' %]<p>An error has occurred. Check the logs.</p>
|
||
[% END %]
|
||
</div>
|
||
[% END %]
|
||
[% UNLESS patron %]
|
||
<fieldset class="brief">
|
||
<label>Search patrons</label>
|
||
[% PROCESS patron_search_filters_simple %]
|
||
[% PROCESS patron_search_table table_id => 'table_borrowers', open_on_row_click => 1 %]
|
||
</fieldset>
|
||
[% ELSE %]
|
||
[% IF biblio.can_article_request( patron ) %]
|
||
[% IF article_request_fee > 0 %]
|
||
<div class="dialog alert">
|
||
Patron will be charged with <strong>[% article_request_fee | $Price %]</strong> for every request
|
||
</div>
|
||
[% END %]
|
||
<form id="place-article-request" method="post" action="/cgi-bin/koha/circ/request-article.pl">
|
||
<input type="hidden" name="action" value="create" />
|
||
<input type="hidden" name="biblionumber" id="biblionumber" value="[% biblio.biblionumber | html %]" />
|
||
<input type="hidden" name="borrowernumber" id="borrowernumber" value="[% patron.id | html %]" />
|
||
|
||
<fieldset class="rows">
|
||
<legend>Place article request from [% biblio.title | html %] for [% patron.firstname | html %] [% patron.surname | html %] ( [% patron.cardnumber | html %] )</legend>
|
||
<ul>
|
||
<li>
|
||
<label for="title">Title:</label>
|
||
<input type="text" name="title" id="title" size="50"/>
|
||
</li>
|
||
|
||
<li>
|
||
<label for="author">Author:</label>
|
||
<input type="text" name="author" id="author" size="50"/>
|
||
</li>
|
||
|
||
<li>
|
||
<label for="volume">Volume:</label>
|
||
<input type="text" name="volume" id="volume" size="50"/>
|
||
</li>
|
||
|
||
<li>
|
||
<label for="issue">Issue:</label>
|
||
<input type="text" name="issue" id="issue" size="50"/>
|
||
</li>
|
||
|
||
<li>
|
||
<label for="date">Date:</label>
|
||
<input type="text" name="date" id="date" size="50"/>
|
||
</li>
|
||
|
||
<li>
|
||
<label for="toc_request">Table of contents:</label>
|
||
<input type="checkbox" name="toc_request" value="1"/>
|
||
</li>
|
||
|
||
<li>
|
||
<label for="pages">Pages:</label>
|
||
<input type="text" name="pages" id="pages" size="50"/>
|
||
</li>
|
||
|
||
<li>
|
||
<label for="chapters">Chapters:</label>
|
||
<input type="text" name="chapters" id="chapters" size="50"/>
|
||
</li>
|
||
|
||
<li>
|
||
<label for="patron_notes">Patron notes:</label>
|
||
<input type="text" name="patron_notes" id="patron_notes" size="50"/>
|
||
</li>
|
||
|
||
<li>
|
||
<label for="format">Format:</label>
|
||
<select name="format" id="format">
|
||
<option value="PHOTOCOPY">Photocopy</option>
|
||
<option value="SCAN">Digital scan</option>
|
||
</select>
|
||
</li>
|
||
|
||
<li>
|
||
<label for="branchcode">Pickup library:</label>
|
||
<select name="branchcode" id="branchcode">
|
||
[% FOREACH b IN Branches.all %]
|
||
[% IF b.branchcode == Branches.GetLoggedInBranchcode %]
|
||
<option value="[% b.branchcode | html %]" selected="selected">[% b.branchname | html %]</option>
|
||
[% ELSE %]
|
||
<option value="[% b.branchcode | html %]">[% b.branchname | html %]</option>
|
||
[% END %]
|
||
[% END %]
|
||
</select>
|
||
</li>
|
||
</ul>
|
||
</fieldset>
|
||
|
||
[% SET article_request_type = biblio.article_request_type( patron ) %]
|
||
[% IF article_request_type != 'bib_only' %]
|
||
<table id="current-requests-table" class="ar-table table table-bordered table-striped">
|
||
<caption>Select item:</caption>
|
||
<thead>
|
||
<tr>
|
||
<th> </th>
|
||
<th>Item type</th>
|
||
<th>Barcode</th>
|
||
<th>Home library</th>
|
||
<th>Call number</th>
|
||
<th>Enumeration</th>
|
||
</tr>
|
||
</thead>
|
||
|
||
<tbody>
|
||
[% FOREACH item IN biblio.items %]
|
||
[% IF item.can_article_request( patron ) %]
|
||
<tr>
|
||
<td>
|
||
[% IF article_request_type == 'item_only' && !checked %]
|
||
[% SET checked = 1 %]
|
||
<input type="radio" name="itemnumber" value="[% item.itemnumber | html %]" checked="checked" />
|
||
[% ELSE %]
|
||
<input type="radio" name="itemnumber" value="[% item.itemnumber | html %]" />
|
||
[% END %]
|
||
</td>
|
||
<td>
|
||
[% ItemTypes.GetDescription( item.itype ) | html %]
|
||
</td>
|
||
<td>
|
||
[% item.barcode | html %]
|
||
</td>
|
||
<td>
|
||
[% Branches.GetName( item.homebranch ) | html %]
|
||
</td>
|
||
<td>
|
||
[% item.itemcallnumber | html %]
|
||
</td>
|
||
<td>
|
||
[% item.enumchron | html %]
|
||
</td>
|
||
</tr>
|
||
[% END %]
|
||
[% END %]
|
||
|
||
[% IF article_request_type != 'item_only' %]
|
||
<tr>
|
||
<td>
|
||
<input type="radio" name="itemnumber" value="" checked="checked"/>
|
||
</td>
|
||
<td colspan="5">
|
||
Any item
|
||
</td>
|
||
</tr>
|
||
[% END %]
|
||
</tbody>
|
||
</table>
|
||
[% END %]
|
||
|
||
<p>
|
||
<input type="submit" class="btn btn-default" value="Place request" />
|
||
</p>
|
||
</form>
|
||
[% ELSE %]
|
||
No article requests can be made for this record.
|
||
[% END %]
|
||
|
||
[% END %]
|
||
|
||
[% SET biblio_current_article_requests = Context.Scalar( Context.Scalar( biblio, 'article_requests' ), 'filter_by_current' ) %]
|
||
[% IF biblio_current_article_requests.count > 0 && !patron %]
|
||
<fieldset class="rows left" id="current-article-requests-fieldset">
|
||
<legend>Current article requests</legend>
|
||
|
||
<table id="current-article-requests-table">
|
||
<tr>
|
||
<th>Placed on</th>
|
||
<th>Patron</th>
|
||
<th>Title</th>
|
||
<th>Author</th>
|
||
<th>Volume</th>
|
||
<th>Issue</th>
|
||
<th>Date</th>
|
||
<th>TOC</th>
|
||
<th>Pages</th>
|
||
<th>Chapters</th>
|
||
<th>Patron notes</th>
|
||
<th>Format</th>
|
||
<th>Item</th>
|
||
<th>Status</th>
|
||
<th>Pickup library</th>
|
||
<th> </th>
|
||
</tr>
|
||
|
||
[% FOREACH ar IN biblio_current_article_requests %]
|
||
<tr>
|
||
<td>[% ar.created_on | $KohaDates %]</td>
|
||
<td><a href="/cgi-bin/koha/members/moremember.pl?borrowernumber=[% ar.borrowernumber | uri %]">[% ar.borrower.firstname | html %] [% ar.borrower.surname | html %]</a></td>
|
||
<td>[% ar.title | html %]</td>
|
||
<td>[% ar.author | html %]</td>
|
||
<td>[% ar.volume | html %]</td>
|
||
<td>[% ar.issue | html %]</td>
|
||
<td>[% ar.date | html %]</td>
|
||
<td>[% IF ar.toc_request %]Yes[% END %]</td>
|
||
<td>[% ar.pages | html %]</td>
|
||
<td>[% ar.chapters | html %]</td>
|
||
<td>[% ar.patron_notes | html %]</td>
|
||
<td>[% IF ar.format == 'PHOTOCOPY' %]Copy[% ELSIF ar.format == 'SCAN' %]Scan[% END %]</td>
|
||
<td>
|
||
[% IF ar.item %]
|
||
<a href="/cgi-bin/koha/catalogue/moredetail.pl?itemnumber=[% ar.itemnumber | uri %]&biblionumber=[% ar.biblionumber | uri %]">[% ar.item.barcode | html %]</a>
|
||
[% END %]
|
||
</td>
|
||
<td>
|
||
[% IF ar.status == 'PENDING' %]
|
||
<span>Pending</span>
|
||
[% ELSIF ar.status == 'PROCESSING' %]
|
||
<span>Processing</span>
|
||
[% ELSIF ar.status == 'REQUESTED' %]
|
||
<span>New</span>
|
||
[% ELSIF ar.status == 'COMPLETED' %]
|
||
<span>Completed</span>
|
||
[% ELSIF ar.status == 'CANCELED' %]
|
||
<span>Canceled</span>
|
||
[% END %]
|
||
</td>
|
||
<td>
|
||
<i id="update-processing-[% ar.id | html %]" class="fa fa-cog fa-spin hidden"></i>
|
||
<select name="branchcode" id="branchcode-[% ar.id | html %]" class="ar-update-branchcode">
|
||
[% FOREACH b IN Branches.all %]
|
||
[% IF b.branchcode == ar.branchcode %]
|
||
<option value="[% b.branchcode | html %]" selected="selected">[% b.branchname | html %]</option>
|
||
[% ELSE %]
|
||
<option value="[% b.branchcode | html %]">[% b.branchname | html %]</option>
|
||
[% END %]
|
||
[% END %]
|
||
</select>
|
||
</td>
|
||
<td>
|
||
<a title="Cancel article request" href="#" id="cancel-[% ar.id | html %]" class="ar-cancel-request">
|
||
<i id="cancel-processing-spinner-[% ar.id | html %]" class="fa fa-cog fa-spin hide"></i>
|
||
<i id="cancel-processing-[% ar.id | html %]" class="fa fa-times fa-lg" style="color:red"></i>
|
||
</a>
|
||
</td>
|
||
</tr>
|
||
[% END %]
|
||
</table>
|
||
</fieldset>
|
||
[% PROCESS cancel_modal %]
|
||
[% END %]
|
||
|
||
</main>
|
||
</div> <!-- /.col-sm-10.col-sm-push-2 -->
|
||
|
||
<div class="col-sm-2 col-sm-pull-10">
|
||
<aside>
|
||
[% INCLUDE 'biblio-view-menu.inc' %]
|
||
</aside>
|
||
</div> <!-- /.col-sm-2.col-sm-pull-10 -->
|
||
</div> <!-- /.row -->
|
||
|
||
[% MACRO jsinclude BLOCK %]
|
||
[% INCLUDE 'datatables.inc' %]
|
||
|
||
<script>
|
||
$('#current-article-requests').ready(function() {
|
||
$(".hide").hide();
|
||
});
|
||
|
||
$(document).ready(function() {
|
||
|
||
$( ".ar-update-branchcode" ).on('focus', function(){
|
||
previous_branchcode = this.value;
|
||
}).on('change', function(){
|
||
var branchcode = this.value;
|
||
var c = confirm(_("Are you sure you want to change the pickup library from %s to %s for this request?").format( previous_branchcode, branchcode ));
|
||
|
||
if ( c ) {
|
||
var id = this.id.split("branchcode-")[1];
|
||
$("#update-processing-" + id ).css({opacity: 0, visibility: "visible"}).animate({opacity: 1.0}, 200);
|
||
|
||
$.ajax({
|
||
type: "POST",
|
||
url: '/cgi-bin/koha/svc/article_request',
|
||
data: {
|
||
action: 'update_branchcode',
|
||
id: id,
|
||
branchcode: branchcode,
|
||
},
|
||
success: function( data ) {
|
||
$("#update-processing-" + id ).css({opacity: 1.0, visibility: "visible"}).animate({opacity: 0}, 200);
|
||
},
|
||
dataType: 'json'
|
||
});
|
||
|
||
} else {
|
||
this.value = previous_branchcode;
|
||
}
|
||
});
|
||
|
||
$('#modal-cancellation-reason').on('change', function(e) {
|
||
let reason = $(this).val();
|
||
$('#modal-notes').attr('disabled', !!reason);
|
||
})
|
||
|
||
let cancel_a;
|
||
$("#cancelModalConfirmBtn").on("click",function(e) {
|
||
var id = cancel_a.attr('id').split("cancel-")[1];
|
||
$("#cancel-processing-" + id ).hide('slow');
|
||
$("#cancel-processing-spinner-" + id ).show('slow');
|
||
|
||
let reason = $("#modal-cancellation-reason").val();
|
||
let notes = $("#modal-notes").val();
|
||
let query = '?'+(reason?'cancellation_reason='+reason:'notes='+notes)
|
||
|
||
$.ajax({
|
||
type: "DELETE",
|
||
url: '/api/v1/article_requests/'+id+query,
|
||
success: function( data ) {
|
||
cancel_a.parents('tr').hide('slow');
|
||
}
|
||
});
|
||
});
|
||
|
||
|
||
$(".ar-cancel-request").on("click", function(){
|
||
cancel_a = $(this);
|
||
$('#cancelModal').modal();
|
||
});
|
||
|
||
// Initialize format(s)
|
||
var supported_formats = "[% Koha.Preference('ArticleRequestsSupportedFormats') | $raw %]";
|
||
if( !supported_formats.match(/PHOTOCOPY/) )
|
||
$('#format option[value="PHOTOCOPY"]').remove();
|
||
if( !supported_formats.match(/SCAN/) )
|
||
$('#format option[value="SCAN"]').remove();
|
||
|
||
if( $('#format option').length > 1 ) {
|
||
// Select first listed format
|
||
var first_format = supported_formats.split('|')[0].replace(/^\s*|\s*$/g, '');
|
||
$('#format option[value="'+first_format+'"]').attr('selected', true);
|
||
}
|
||
});
|
||
</script>
|
||
|
||
[% PROCESS patron_search_js table_id => 'table_borrowers', categories => categories, libraries => libraries, extended_attribute_types => attribute_type_codes, columns => columns, open_on_row_click => 1, on_click_url => '/cgi-bin/koha/circ/request-article.pl?biblionumber=' _ biblio.biblionumber, redirect_if_one_result => 1, redirect_url => '/cgi-bin/koha/circ/request-article.pl?biblionumber=' _ biblio.biblionumber %]
|
||
|
||
[% END %]
|
||
|
||
[% INCLUDE 'intranet-bottom.inc' %]
|