4 [% USE AuthorisedValues %]
7 [% INCLUDE 'doc-head-open.inc' %]
8 <title>Koha › Payments</title>
9 [% INCLUDE 'doc-head-close.inc' %]
12 <body id="payments" class="pos">
13 [% INCLUDE 'header.inc' %]
14 [% INCLUDE 'circ-search.inc' %]
16 <div id="breadcrumbs"><a href="/cgi-bin/koha/mainpage.pl">Home</a> › Point of sale</div>
18 <div class="main container-fluid">
20 <div class="col-sm-10 col-sm-push-2">
22 [% IF ( error_registers ) %]
23 <div id="error_message" class="dialog alert">
24 You must have at least one cash register associated with this branch before you can record payments.
27 <form name="payForm" id="payForm" method="post" action="/cgi-bin/koha/pos/pay.pl">
30 <div class="col-sm-6">
32 <fieldset class="rows">
33 <legend>This sale</legend>
34 <p>Click to edit item cost or quantities</p>
35 <table id="sale" class="table_sale">
48 <td colspan="3">Total payable:</td>
55 <fieldset class="rows">
56 <legend>Collect payment</legend>
59 <label for="paid">Amount being paid: </label>
60 <input type="number" min="0.00" max="10000.00" step="0.01" name="paid" id="paid" value="[% amountoutstanding | $Price on_editing => 1 %]" readonly/>
63 <label for="collected">Collected from patron: </label>
64 <input type="number" min="0.00" max="10000.00" step="0.01" name="collected" id="collected" value=""/>
67 <label>Change to give: </label>
68 <span id="change">0.00</span>
69 <input type="hidden" name="change" value="0.00"/>
72 [% SET payment_types = AuthorisedValues.GetAuthValueDropbox('PAYMENT_TYPE') %]
73 [% IF payment_types %]
75 <label for="payment_type">Payment type: </label>
76 <select name="payment_type" id="payment_type">
77 [% FOREACH pt IN payment_types %]
78 <option value="[% pt.authorised_value | html %]">[% pt.lib | html %]</option>
84 [% IF Koha.Preference('UseCashRegisters') %]
86 <label for="cash_register">Cash register: </label>
87 <select name="cash_register" id="cash_register">
88 [% FOREACH register IN registers %]
89 [% IF register.id == registerid %]
90 <option value="[% register.id %]" selected="selected">[% register.name | html %]</option>
92 <option value="[% register.id %]">[% register.name | html %]</option>
103 <div class="col-sm-6">
104 <fieldset class="rows">
105 <legend>Items for purchase</legend>
106 [% SET invoice_types = AuthorisedValues.GetAuthValueDropbox('MANUAL_INV') %]
107 [% IF invoice_types %]
108 <table id="invoices">
118 [% FOREACH invoice IN invoice_types %]
120 <td>[% invoice.authorised_value | html %]</td>
121 <td>[% invoice.lib_opac | html %]</td>
122 <td>[% invoice.lib | html %]</td>
124 <button class="add_button" data-invoice-code="[% invoice.lib_opac %]" data-invoice-title="[% invoice.authorised_value | html %]" data-invoice-price="[% invoice.lib | html %]"><i class="fa fa-plus"></i> Add</button>
130 You have no manual invoice types defined
136 <input type="submit" name="submitbutton" value="Confirm" />
137 <a class="cancel" href="/cgi-bin/koha/pos/pay.pl">Cancel</a>
144 <div class="col-sm-2 col-sm-pull-10">
146 [% INCLUDE 'pos-menu.inc' %]
149 </div> <!-- /.row -->
152 <div id="confirm_change_form" class="modal" tabindex="-1" role="dialog" aria-hidden="true">
153 <div class="modal-dialog">
154 <div class="modal-content">
155 <div class="modal-header">
156 <h3>The amount collected is more than the outstanding charge</h3>
158 <div class="modal-body">
159 <p>The amount collected from the patron is higher than the amount to be paid.</p>
160 <p>The change to give is <b><span id="modal_change">0.00</span></b>.</p>
161 <p>Confirm this payment?</p>
163 <div class="modal-footer">
164 <button class="btn btn-default approve" id="modal_submit" type="button"><i class="fa fa-check"></i> Yes</button>
165 <button class="btn btn-default deny cancel" href="#" data-dismiss="modal" aria-hidden="true"><i class="fa fa-times"></i> No</button>
171 [% IF payment_id && Koha.Preference('FinePaymentAutoPopup') %]
172 <!-- Automatic Print Reciept -->
173 <a id="printReciept" style="display: none" href="#"></a>
176 [% MACRO jsinclude BLOCK %]
177 [% Asset.js("js/admin-menu.js") | $raw %]
178 [% INCLUDE 'datatables.inc' %]
179 [% Asset.js("lib/jquery/plugins/jquery.jeditable.mini.js") | $raw %]
181 function fnClickAddRow( table, invoiceTitle, invoicePrice ) {
191 function moneyFormat(textObj) {
192 var newValue = textObj.value;
198 for(var i=0; i < newValue.length; i++) {
199 aChar = newValue.substring(i, i+1);
200 if (aChar >= "0" && aChar <= "9") {
202 decAmount = "" + decAmount + aChar;
205 dolAmount = "" + dolAmount + aChar;
217 if (dolAmount == "") {
221 if (dolAmount.length > 1) {
222 while(dolAmount.length > 1 && dolAmount.substring(0,1) == "0") {
223 dolAmount = dolAmount.substring(1,dolAmount.length);
226 if (decAmount.length > 2) {
227 decAmount = decAmount.substring(0,2);
230 if (decAmount.length == 1) {
231 decAmount = decAmount + "0";
233 if (decAmount.length == 0) {
234 decAmount = decAmount + "00";
237 textObj.value = dolAmount + "." + decAmount;
240 function updateChangeValues() {
241 var change = $('#change')[0];
242 change.innerHTML = Math.round(($('#collected')[0].value - $('#paid')[0].value) * 100) / 100;
243 if (change.innerHTML <= 0) {
244 change.innerHTML = "0.00";
246 change.value = change.innerHTML;
248 change.innerHTML = change.value;
251 $(':input[name="change"]').val(change.value);
252 $('#modal_change').html(change.innerHTML);
255 $(document).ready(function() {
256 var sale_table = $("#sale").dataTable($.extend(true, {}, dataTablesDefaults, {
264 "bSearchable": false,
267 "mRender": function ( data, type, full ) {
268 var price = Number.parseFloat(data).toFixed(2);
272 "aTargets": [-2, -3],
273 "sClass" : "editable",
278 "fnDrawCallback": function (oSettings) {
280 local.$('.editable').editable( function(value, settings) {
281 var aPos = local.fnGetPosition( this );
282 local.fnUpdate( value, aPos[0], aPos[1], true, false );
288 "fnRowCallback": function( nRow, aData, iDisplayIndex, iDisplayIndexFull ) {
289 var iTotal = aData[1] * aData[2];
290 this.fnUpdate( iTotal, nRow, 3, false, false );
292 "fnFooterCallback": function(nFoot, aData, iStart, iEnd, aiDisplay) {
294 for ( var i=0 ; i<aData.length ; i++ )
296 iTotalPrice += aData[i][3]*1;
299 iTotalPrice = Number.parseFloat(iTotalPrice).toFixed(2);
300 nFoot.getElementsByTagName('td')[1].innerHTML = iTotalPrice;
301 $('#paid').val(iTotalPrice);
302 $('#paid').trigger('change');
306 var items_table = $("#invoices").dataTable($.extend(true,{}, dataTablesDefaults, {
308 { "aTargets": [ -1, -2 ], "bSortable": false, "bSearchable":false },
310 "aaSorting": [[ 0, "asc" ]],
311 "paginationType": "full",
314 $(".add_button").on("click", function(e) {
316 fnClickAddRow(sale_table, $( this ).data('invoiceTitle'), $( this ).data('invoicePrice') );
317 items_table.fnFilter( '' );
320 // Change calculation and modal
321 var change = $('#change')[0];
322 $("#paid, #collected").on("change",function() {
324 if (change != undefined) {
325 updateChangeValues();
330 $('#modal_submit').click(function() {
332 $('#payForm').submit();
335 $('#payForm').submit(function(e){
336 if (change != undefined && change.innerHTML > 0.00 && !checked) {
338 $("#confirm_change_form").modal("show");
340 var rows = sale_table.fnGetData();
341 rows.forEach(function (row, index) {
350 value: JSON.stringify(sale)
351 }).appendTo('#payForm');
357 [% IF payment_id && Koha.Preference('FinePaymentAutoPopup') %]
358 $("#printReciept").click(function() {
359 var win = window.open('/cgi-bin/koha/pos/printreceipt.pl?action=print&accountlines_id=[% payment_id | uri %]&collected=[% collected | uri %]&change=[% change | uri %]', '_blank');
362 $("#printReciept").click();
368 [% INCLUDE 'intranet-bottom.inc' %]