Bug 20120: Prevent writeoffs of more than the amount owed for a fee
[koha.git] / koha-tmpl / intranet-tmpl / prog / en / modules / members / paycollect.tt
1 [% USE Asset %]
2 [% USE Koha %]
3 [% USE Branches %]
4 [% USE AuthorisedValues %]
5 [% USE Price %]
6 [% SET footerjs = 1 %]
7 [% INCLUDE 'doc-head-open.inc' %]
8 <title>Koha &rsaquo; Patrons &rsaquo; Collect fine payment for  [% patron.firstname %] [% patron.surname %]</title>
9 [% INCLUDE 'doc-head-close.inc' %]
10 </head>
11
12 <body id="pat_paycollect" class="pat">
13 [% INCLUDE 'header.inc' %]
14 [% INCLUDE 'patron-search.inc' %]
15 <div id="breadcrumbs"><a href="/cgi-bin/koha/mainpage.pl">Home</a> &rsaquo; <a href="/cgi-bin/koha/members/members-home.pl">Patrons</a>  &rsaquo; <a href="/cgi-bin/koha/members/pay.pl?borrowernumber=[% patron.borrowernumber %]">Pay fines for [% patron.firstname %] [% patron.surname %]</a> &rsaquo; [% IF ( pay_individual ) %]Pay an individual fine[% ELSIF ( writeoff_individual ) %]Write off an individual fine[% ELSE %][% IF ( selected_accts ) %]Pay an amount toward selected fines[% ELSE %]Pay an amount toward all fines[% END %][% END %]</div>
16
17 <div id="doc3" class="yui-t2">
18
19 <div id="bd">
20 <div id="yui-main">
21 <div class="yui-b">
22 [% INCLUDE 'members-toolbar.inc' borrowernumber=patron.borrowernumber %]
23
24
25 <!-- The manual invoice and credit buttons -->
26 <div class="statictabs">
27 <ul>
28     <li>
29     <a href="/cgi-bin/koha/members/boraccount.pl?borrowernumber=[% patron.borrowernumber %]">Account</a>
30     </li>
31     <li class="active">
32     <a href="/cgi-bin/koha/members/pay.pl?borrowernumber=[% patron.borrowernumber %]" >Pay fines</a>
33     </li>
34     <li>
35     <a href="/cgi-bin/koha/members/maninvoice.pl?borrowernumber=[% patron.borrowernumber %]" >Create manual invoice</a>
36     </li>
37     <li>
38     <a href="/cgi-bin/koha/members/mancredit.pl?borrowernumber=[% patron.borrowernumber %]" >Create manual credit</a>
39     </li>
40 </ul>
41 <div class="tabs-container">
42 [% IF ( error_over ) %]
43     <div id="error_message" class="dialog alert">
44     You must pay a value less than or equal to [% total_due | format('%.2f') %].
45     </div>
46 [% END %]
47
48 [% IF ( pay_individual ) %]
49     <form name="payindivfine" id="payindivfine" method="post" action="/cgi-bin/koha/members/paycollect.pl">
50     <input type="hidden" name="csrf_token" value="[% csrf_token %]" />
51     <input type="hidden" name="borrowernumber" id="borrowernumber" value="[% patron.borrowernumber %]" />
52     <input type="hidden" name="pay_individual" id="pay_individual" value="[% pay_individual %]" />
53     <input type="hidden" name="itemnumber" id="itemnumber" value="[% itemnumber %]" />
54     <input type="hidden" name="description" id="description" value="[% description %]" />
55     <input type="hidden" name="accounttype" id="accounttype" value="[% accounttype %]" />
56     <input type="hidden" name="amount" id="amount" value="[% amount %]" />
57     <input type="hidden" name="amountoutstanding" id="amountoutstanding" value="[% amountoutstanding %]" />
58     <input type="hidden" name="accountlines_id" id="accountlines_id" value="[% accountlines_id %]" />
59     <input type="hidden" name="title" id="title" value="[% title %]" />
60
61 <fieldset class="rows">
62     <legend>Pay an individual fine</legend>
63     <input type="hidden" name="payment_note" id="payment_note" value="[% payment_note %]" />
64     <table>
65     <thead><tr>
66             <th>Description</th>
67             <th>Account type</th>
68             <th>Amount</th>
69             <th>Amount outstanding</th>
70         </tr></thead>
71     <tfoot>
72         <td colspan="3">Total amount payable:</td><td>[% amountoutstanding | format('%.2f') %]</td>
73     </tfoot>
74     <tbody><tr>
75             <td>
76                 [% individual_description %]
77             </td>
78             <td>[% accounttype %]</td>
79             <td class="debit">[% amount | format('%.2f') %]</td>
80             <td class="debit">[% amountoutstanding | format('%.2f') %]</td>
81         </tr></tbody>
82 </table>
83
84 <ol>
85
86     <li>
87         <label for="paid">Collect from patron: </label>
88             <!-- default to paying all -->
89         <input name="paid" id="paid" value="[% amountoutstanding %]" />
90     </li>
91     [% SET payment_types = AuthorisedValues.GetAuthValueDropbox('PAYMENT_TYPE') %]
92     [% IF payment_types %]
93         <li>
94             <label for="payment_type">Payment type: </label>
95             <select name="payment_type" id="payment_type">
96                 <option value=""></option>
97                 [% FOREACH pt IN payment_types %]
98                     <option value="[% pt.authorised_value %]">[% pt.lib %]</option>
99                 [% END %]
100             </select>
101         </li>
102     [% END %]
103 </ol>
104 </fieldset>
105
106     <div class="action"><input type="submit" name="submitbutton" value="Confirm" />
107         <a class="cancel" href="/cgi-bin/koha/members/pay.pl?borrowernumber=[% patron.borrowernumber %]">Cancel</a></div>
108     </form>
109 [% ELSIF ( writeoff_individual ) %]
110     <form name="woindivfine" id="woindivfine" action="/cgi-bin/koha/members/pay.pl" method="post" >
111     <input type="hidden" name="csrf_token" value="[% csrf_token %]" />
112     <fieldset class="rows">
113     <legend>Write off an individual fine</legend>
114     <input type="hidden" name="borrowernumber" id="borrowernumber" value="[% patron.borrowernumber %]" />
115     <input type="hidden" name="pay_individual" id="pay_individual" value="[% pay_individual %]" />
116     <input type="hidden" name="itemnumber" id="itemnumber" value="[% itemnumber %]" />
117     <input type="hidden" name="description" id="description" value="[% description %]" />
118     <input type="hidden" name="accounttype" id="accounttype" value="[% accounttype %]" />
119     <input type="hidden" name="amount" id="amount" value="[% amount %]" />
120     <input type="hidden" name="accountlines_id" id="accountlines_id" value="[% accountlines_id %]" />
121     <input type="hidden" name="title" id="title" value="[% title %]" />
122     <input type="hidden" name="payment_note" id="payment_note" value="[% payment_note %]" />
123     <input type="hidden" name="amountoutstanding" id="amountoutstanding" value="[% amountoutstanding %]" />
124     <input type="hidden" name="confirm_writeoff" id="confirm_writeoff" value="1" />
125     <table>
126     <thead><tr>
127             <th>Description</th>
128             <th>Account type</th>
129             <th>Amount</th>
130             <th>Amount outstanding</th>
131         </tr></thead>
132     <tfoot><td colspan="3">Total amount outstanding:</td><td>[% amountoutstanding | format('%.2f') %]</td></tfoot>
133     <tbody><tr>
134             <td>[% description %] [% title %]</td>
135             <td>[% accounttype %]</td>
136             <td class="debit">[% amount | format('%.2f') %]</td>
137             <td class="debit">[% amountoutstanding | format('%.2f') %]</td>
138         </tr></tbody>
139     </table>
140
141             <ol>
142                 <li>
143                     <label for="paid">Writeoff amount: </label>
144                     <!-- default to writing off all -->
145                     <input name="amountwrittenoff" id="amountwrittenoff" value="[% amountoutstanding | $Price %]" />
146                 </li>
147             </ol>
148         </fieldset>
149         <div class="action">
150             <input type="submit" value="Write off this charge" />
151             <a class="cancel" href="/cgi-bin/koha/members/pay.pl?borrowernumber=[% patron.borrowernumber %]">Cancel</a>
152         </div>
153     </form>
154 [% ELSE %]
155
156     <form name="payfine" id="payfine" method="post" action="/cgi-bin/koha/members/paycollect.pl">
157     <input type="hidden" name="csrf_token" value="[% csrf_token %]" />
158     <input type="hidden" name="borrowernumber" id="borrowernumber" value="[% patron.borrowernumber %]" />
159     <input type="hidden" name="selected_accts" id="selected_accts" value="[% selected_accts %]" />
160     <input type="hidden" name="total" id="total" value="[% total %]" />
161
162     <fieldset class="rows">
163     [% IF ( selected_accts ) %]<legend>Pay an amount toward selected fines</legend>[% ELSE %]<legend>Pay an amount toward all fines</legend>[% END %]
164     <ol>
165         <li>
166             <span class="label">Total amount outstanding: </span>
167             <span class="debit">[% total | format('%.2f') %]</span>
168         </li>
169     <li>
170         <label for="paid">Collect from patron: </label>
171         <!-- default to paying all -->
172         <input name="paid" id="paid" value="[% total | format('%.2f') %]" />
173     </li>
174     [% SET payment_types = AuthorisedValues.GetAuthValueDropbox('PAYMENT_TYPE') %]
175     [% IF payment_types %]
176         <li>
177             <label for="payment_type">Payment type: </label>
178             <select name="payment_type" id="payment_type">
179                 <option value=""></option>
180                 [% FOREACH pt IN payment_types %]
181                     <option value="[% pt.authorised_value %]">[% pt.lib %]</option>
182                 [% END %]
183             </select>
184         </li>
185     [% END %]
186     <li>
187         <label for="selected_accts_notes">Note: </label>
188         <textarea name="selected_accts_notes" id="selected_accts_notes">[% selected_accts_notes %]</textarea>
189     </li>
190     </ol>
191     </fieldset>
192     <div class="action"><input type="submit" name="submitbutton" value="Confirm" />
193         <a class="cancel" href="/cgi-bin/koha/members/boraccount.pl?borrowernumber=[% patron.borrowernumber %]">Cancel</a></div>
194     </form>
195 [% END %]
196 </div></div>
197 </div>
198 </div>
199
200 <div class="yui-b">
201 [% INCLUDE 'circ-menu.inc' %]
202 </div>
203 </div>
204
205 [% MACRO jsinclude BLOCK %]
206     [% Asset.js("js/members-menu.js") %]
207     <script type= "text/javascript">
208         $(document).ready(function() {
209             $('#payindivfine, #payfine').preventDoubleFormSubmit();
210             $("#paid").on("change",function(){
211                 moneyFormat( this );
212             });
213         });
214
215         prevent_default = 1;
216         $('#woindivfine').on('submit', function(e){
217             if ( prevent_default ) {
218                 e.preventDefault();
219
220                 let amount_outstanding = parseFloat( $('#amountoutstanding').attr('value') );
221                 let amount_writeoff = parseFloat( $('#amountwrittenoff').attr('value') );
222                 if ( amount_writeoff > amount_outstanding ) {
223                     alert(_("You are attemping to writeoff more than the value of the fee."));
224                     $('#woindivfine').beenSubmitted = false;
225                 } else {
226                     prevent_default = 0;
227                     $('#woindivfine').preventDoubleFormSubmit();
228                     $('#woindivfine').submit();
229                 }
230             }
231         });
232
233         function moneyFormat(textObj) {
234             var newValue = textObj.value;
235             var decAmount = "";
236             var dolAmount = "";
237             var decFlag   = false;
238             var aChar     = "";
239
240             for(i=0; i < newValue.length; i++) {
241                 aChar = newValue.substring(i, i+1);
242                 if (aChar >= "0" && aChar <= "9") {
243                     if(decFlag) {
244                         decAmount = "" + decAmount + aChar;
245                     }
246                     else {
247                         dolAmount = "" + dolAmount + aChar;
248                     }
249                 }
250                 if (aChar == ".") {
251                     if (decFlag) {
252                         dolAmount = "";
253                         break;
254                     }
255                     decFlag = true;
256                 }
257             }
258
259             if (dolAmount == "") {
260                 dolAmount = "0";
261             }
262         // Strip leading 0s
263             if (dolAmount.length > 1) {
264                 while(dolAmount.length > 1 && dolAmount.substring(0,1) == "0") {
265                     dolAmount = dolAmount.substring(1,dolAmount.length);
266                 }
267             }
268             if (decAmount.length > 2) {
269                 decAmount = decAmount.substring(0,2);
270             }
271         // Pad right side
272             if (decAmount.length == 1) {
273                decAmount = decAmount + "0";
274             }
275             if (decAmount.length == 0) {
276                decAmount = decAmount + "00";
277             }
278
279             textObj.value = dolAmount + "." + decAmount;
280         }
281     </script>
282 [% END %]
283
284 [% INCLUDE 'intranet-bottom.inc' %]