d36566d6ea
Due to the addition of a 'Write off selected' button in 18.11, users without writeoff permissions could mistakenly view and action the 'Write off selected' option for a patron in Accounting > Make a payment (Fines > Pay fines). The attached patch corrects this error. Test plan: 1) Make sure that a staff user has '(writeoff) Write off fines and fees' permission disabled 2) Bring up a patron with an unpaid fee, go to Accounting -> Make a payment 3) Note that 'Write off selected' button is displayed. 4) Select a fee, click 'Write off selected'. Note that staff member has access to 'Write off an amount toward selected fines' 5) Apply the patch 6) Repeat steps 1-2, and note that the button is no longer displayed 7) Bonus points, as a staff user with writeoff permissions enabled check that all four buttons (Pay amount, Pay selected, Write off all, Write off selected) are displayed Sponsored-by: Catalyst IT Signed-off-by: Liz Rea <wizzyrea@gmail.com> Signed-off-by: Katrin Fischer <katrin.fischer.83@web.de> Signed-off-by: Liz Rea <wizzyrea@gmail.com> Signed-off-by: Kyle M Hall <kyle@bywatersolutions.com> Signed-off-by: Nick Clemens <nick@bywatersolutions.com>
233 lines
10 KiB
Text
233 lines
10 KiB
Text
[% USE raw %]
|
|
[% USE Asset %]
|
|
[% USE Koha %]
|
|
[% USE AuthorisedValues %]
|
|
[% USE Branches %]
|
|
[% USE Price %]
|
|
[% USE ColumnsSettings %]
|
|
[% USE KohaDates %]
|
|
[% SET footerjs = 1 %]
|
|
[% PROCESS 'accounts.inc' %]
|
|
[% INCLUDE 'doc-head-open.inc' %]
|
|
<title>Koha › Patrons › Make a payment for [% patron.firstname | html %] [% patron.surname | html %]</title>
|
|
[% INCLUDE 'doc-head-close.inc' %]
|
|
</head>
|
|
|
|
<body id="pat_pay" class="pat">
|
|
[% INCLUDE 'header.inc' %]
|
|
[% INCLUDE 'patron-search.inc' %]
|
|
|
|
<div id="breadcrumbs"><a href="/cgi-bin/koha/mainpage.pl">Home</a> › <a href="/cgi-bin/koha/members/members-home.pl">Patrons</a> › Make a payment for [% patron.firstname | html %] [% patron.surname | html %]</div>
|
|
|
|
<div class="main container-fluid">
|
|
<div class="row">
|
|
<div class="col-sm-10 col-sm-push-2">
|
|
<main>
|
|
|
|
[% INCLUDE 'members-toolbar.inc' borrowernumber=patron.borrowernumber %]
|
|
|
|
<!-- The manual invoice and credit buttons -->
|
|
<div class="statictabs">
|
|
<ul>
|
|
<li><a href="/cgi-bin/koha/members/boraccount.pl?borrowernumber=[% patron.borrowernumber | uri %]">Transactions</a></li>
|
|
<li class="active"><a href="/cgi-bin/koha/members/pay.pl?borrowernumber=[% patron.borrowernumber | uri %]" >Make a payment</a></li>
|
|
<li><a href="/cgi-bin/koha/members/maninvoice.pl?borrowernumber=[% patron.borrowernumber | uri %]" >Create manual invoice</a></li>
|
|
<li><a href="/cgi-bin/koha/members/mancredit.pl?borrowernumber=[% patron.borrowernumber | uri %]" >Create manual credit</a></li>
|
|
</ul>
|
|
<div class="tabs-container">
|
|
|
|
[% IF ( accounts ) %]
|
|
<form action="/cgi-bin/koha/members/pay.pl" method="post" id="pay-fines-form">
|
|
<input type="hidden" name="borrowernumber" id="borrowernumber" value="[% patron.borrowernumber | html %]" />
|
|
<p><span class="checkall"><a id="CheckAll" href="#"><i class="fa fa-check"></i> Select all</a></span> | <span class="clearall"><a id="CheckNone" href="#"><i class="fa fa-remove"></i> Clear all</a></span></p>
|
|
<table id="finest">
|
|
<thead>
|
|
<tr>
|
|
<th class="NoSort"> </th>
|
|
<th class="NoSort">Actions</th>
|
|
<th>Account type</th>
|
|
<th>Description</th>
|
|
<th class="title-string">Date</th>
|
|
<th>Barcode</th>
|
|
<th>Due date</th>
|
|
<th>Return date</th>
|
|
<th class="NoSort">Payment note</th>
|
|
<th>Amount</th>
|
|
<th>Amount outstanding</th>
|
|
</tr>
|
|
</thead>
|
|
|
|
<tbody>
|
|
[% FOREACH line IN accounts %]
|
|
<tr>
|
|
<td>
|
|
[% IF ( line.amountoutstanding > 0 ) %]
|
|
<input class="cb" type="checkbox" checked="checked" name="incl_par_[% line.accountlines_id | html %]" />
|
|
[% END %]
|
|
</td>
|
|
<td class="actions">
|
|
[% IF ( line.amountoutstanding > 0 ) %]
|
|
<button type="submit" class="btn btn-default btn-xs" name="pay_indiv_[% line.accountlines_id | html %]" value="Pay">Pay</button>
|
|
[% IF CAN_user_updatecharges_writeoff %]
|
|
<button type="submit" class="btn btn-default btn-xs" name="wo_indiv_[% line.accountlines_id | html %]" value="Write off">Write off</button>
|
|
[% END %]
|
|
[% END %]
|
|
<input type="hidden" name="itemnumber[% line.accountlines_id | html %]" value="[% line.itemnumber | html %]" />
|
|
<input type="hidden" name="description[% line.accountlines_id | html %]" value="[% line.description | html %]" />
|
|
<input type="hidden" name="accounttype[% line.accountlines_id | html %]" value="[% line.accounttype | html %]" />
|
|
<input type="hidden" name="amount[% line.accountlines_id | html %]" value="[% line.amount | html %]" />
|
|
<input type="hidden" name="accountlines_id[% line.accountlines_id | html %]" value="[% line.accountlines_id | html %]" />
|
|
<input type="hidden" name="amountoutstanding[% line.accountlines_id | html %]" value="[% line.amountoutstanding | html %]" />
|
|
<input type="hidden" name="borrowernumber[% line.accountlines_id | html %]" value="[% line.borrowernumber | html %]" />
|
|
</td>
|
|
<td>
|
|
[% PROCESS account_type_description account=line %]
|
|
</td>
|
|
<td>
|
|
[%- IF line.description %][% line.description | html %][% END %]
|
|
[% IF line.itemnumber %]([% line.item.biblio.title | html %])[% END %]
|
|
</td>
|
|
<td>
|
|
<span title="[% line.date | html %]">[% line.date | $KohaDates %]</span>
|
|
</td>
|
|
<td>
|
|
[% IF line.itemnumber %]
|
|
<a href="/cgi-bin/koha/catalogue/moredetail.pl?itemnumber=[% line.itemnumber | uri %]&biblionumber=[% line.item.biblionumber | uri %]#item[% line.itemnumber | uri %]">[% line.item.barcode | html %]</a>
|
|
[% END %]
|
|
</td>
|
|
<td>
|
|
[% IF line.issue_id %]
|
|
[% line.checkout.date_due | $KohaDates as_due_date => 1 %]
|
|
[% END %]
|
|
</td>
|
|
<td>
|
|
[% IF line.issue_id %]
|
|
[% line.checkout.returndate | $KohaDates with_hours => 1 %]
|
|
[% END %]
|
|
</td>
|
|
<td class="actions">
|
|
<a href="#" class="add-note" data-accountlines_id="[% line.accountlines_id | html %]"><i class="fa fa-plus"></i> Add note</a>
|
|
<span class="payment_note" id="payment_note_[% line.accountlines_id | html %]" style="display:none"><input type="text" size="10" name="payment_note_[% line.accountlines_id | html %]" value="" /> <a href="#" class="cancel-note"><i class="fa fa-remove"></i></a></span>
|
|
</td>
|
|
<td class="debit" style="text-align: right;">[% line.amount | $Price %]</td>
|
|
<td class="debit" style="text-align: right;">[% line.amountoutstanding | $Price %]</td>
|
|
</tr>
|
|
[% END %]
|
|
</tbody>
|
|
|
|
<tfoot>
|
|
[% IF outstanding_credits.total_outstanding < 0 %]
|
|
<tr>
|
|
<td class="total" colspan="10">Outstanding credits could be applied: </td>
|
|
<td class="credit" style="text-align: right;"><button type="submit" id="apply_credits" name="apply_credits" value="apply_credits" class="btn btn-default btn-sm">Apply <strong class="credit">[% outstanding_credits.total_outstanding | $Price %]</strong></button></td>
|
|
</tr>
|
|
[% END %]
|
|
[% IF ( account_grp.total ) %]
|
|
<tr>
|
|
<td class="total" colspan="10" style="text-align: right;">Sub total:</td>
|
|
<td style="text-align: right;">[% account_grp.total | $Price %]</td>
|
|
</tr>
|
|
[% END %]
|
|
<tr>
|
|
<td class="total" colspan="10">Total due:</td>
|
|
[% IF outstanding_credits.total_outstanding < 0 %]
|
|
<td style="text-align: right;">[% total + outstanding_credits.total_outstanding | $Price %]</td>
|
|
[% ELSE %]
|
|
<td style="text-align: right;">[% total | $Price %]</td>
|
|
[% END %]
|
|
</tr>
|
|
</tfoot>
|
|
|
|
</table>
|
|
<fieldset class="action">
|
|
<input type="submit" id="paycollect" name="paycollect" value="Pay amount" class="submit" />
|
|
<input type="submit" id="payselected" name="payselected" value="Pay selected" class="submit" />
|
|
[% IF CAN_user_updatecharges_writeoff %]<input type="submit" name="woall" id="woall" value="Write off all" class="submit" />
|
|
<input type="submit" id="writeoff-selected" name="writeoff_selected" value="Write off selected" class="submit" />[% END %]
|
|
<a class="cancel" href="/cgi-bin/koha/members/boraccount.pl?borrowernumber=[% patron.borrowernumber | html %]">Cancel</a>
|
|
</fieldset>
|
|
</form>
|
|
[% ELSE %]
|
|
<p>[% patron.firstname | html %] [% patron.surname | html %] has no outstanding fines.</p>
|
|
[% END %]
|
|
</div></div>
|
|
|
|
</main>
|
|
</div> <!-- /.col-sm-10.col-sm-push-2 -->
|
|
|
|
<div class="col-sm-2 col-sm-pull-10">
|
|
<aside>
|
|
[% INCLUDE 'circ-menu.inc' %]
|
|
</aside>
|
|
</div> <!-- /.col-sm-2.col-sm-pull-10 -->
|
|
</div> <!-- /.row -->
|
|
|
|
[% MACRO jsinclude BLOCK %]
|
|
[% INCLUDE 'str/members-menu.inc' %]
|
|
[% Asset.js("js/members-menu.js") | $raw %]
|
|
[% Asset.js("lib/jquery/plugins/jquery.checkboxes.min.js") | $raw %]
|
|
[% INCLUDE 'datatables.inc' %]
|
|
[% INCLUDE 'columns_settings.inc' %]
|
|
<script>
|
|
function enableCheckboxActions(){
|
|
// Enable/disable controls if checkboxes are checked
|
|
var checkedBoxes = $("input.cb:checked");
|
|
if ($(checkedBoxes).size()) {
|
|
$("#payselected, #writeoff-selected").prop("disabled",false);
|
|
} else {
|
|
$("#payselected, #writeoff-selected").prop("disabled",true);
|
|
}
|
|
}
|
|
$(document).ready(function(){
|
|
$('#pay-fines-form').preventDoubleFormSubmit();
|
|
$("#woall").click(function(event){
|
|
var msg = _("Are you sure you want to write off %s in outstanding fines? This cannot be undone!").format( "[% total | $Price %]" );
|
|
var answer = confirm(msg);
|
|
if (!answer){
|
|
event.preventDefault();
|
|
}
|
|
});
|
|
$('#CheckAll').click(function(e){
|
|
e.preventDefault();
|
|
$("#finest").checkCheckboxes();
|
|
enableCheckboxActions();
|
|
return false;
|
|
});
|
|
$('#CheckNone').click(function(e){
|
|
e.preventDefault();
|
|
$("#finest").unCheckCheckboxes();
|
|
enableCheckboxActions();
|
|
return false;
|
|
});
|
|
$(".cb").change(function(){
|
|
enableCheckboxActions();
|
|
});
|
|
enableCheckboxActions();
|
|
$(".add-note").on("click", function(e){
|
|
e.preventDefault();
|
|
$(this).hide();
|
|
var accountlines_id = $(this).data("accountlines_id");
|
|
$("#payment_note_" + accountlines_id ).show().find("input").focus();
|
|
});
|
|
$(".cancel-note").on("click", function(e){
|
|
e.preventDefault();
|
|
$(".payment_note").hide().find("input").val("");
|
|
$(".add-note").show();
|
|
});
|
|
|
|
var columns_settings = [% ColumnsSettings.GetColumns('members', 'pay', 'pay-fines-table', 'json') | $raw %];
|
|
KohaTable("finest", {
|
|
"columnDefs": [
|
|
{ "bSortable": false, "bSearchable": false, 'aTargets': [ 'NoSort' ] },
|
|
{ "sType": "anti-the", "aTargets" : [ "anti-the" ] },
|
|
{ "sType": "title-string", "aTargets" : [ "title-string" ] }
|
|
],
|
|
"paging": false,
|
|
'sorting': [[ 3, "asc" ]],
|
|
"autoWidth": false
|
|
}, columns_settings );
|
|
});
|
|
</script>
|
|
[% END %]
|
|
|
|
[% INCLUDE 'intranet-bottom.inc' %]
|