View | Details | Raw Unified | Return to bug 27796
Collapse All | Expand All

(-)a/koha-tmpl/intranet-tmpl/prog/en/includes/payments.inc (-29 lines)
Lines 1-29 Link Here
1
[% USE AuthorisedValues %]
2
[%- BLOCK account_payment_types -%]
3
    [% SET payment_types = [] %]
4
    [% FOR pt IN AuthorisedValues.GetAuthValueDropbox('PAYMENT_TYPE') %]
5
        [% NEXT IF pt.authorised_value.grep("^SIP[[:digit:]]{2}$").size() %]
6
        [% payment_types.push(pt) %]
7
    [% END %]
8
    [% IF payment_types.size > 0 %]
9
        <li>
10
            [% IF Koha.Preference('UseCashRegisters') %]
11
                <label for="payment_type" class="required">Payment type: </label>
12
                <select name="payment_type" id="payment_type" class="required" required="required">
13
                    [% FOREACH pt IN payment_types %]
14
                        <option value="[% pt.authorised_value | html %]">[% pt.lib | html %]</option>
15
                    [% END %]
16
                </select>
17
                <span class="required">Required</span>
18
            [%- ELSE -%]
19
                <label for="payment_type">Payment type: </label>
20
                <select name="payment_type" id="payment_type">
21
                    <option value=""></option>
22
                    [% FOREACH pt IN payment_types %]
23
                        <option value="[% pt.authorised_value | html %]">[% pt.lib | html %]</option>
24
                    [% END %]
25
                </select>
26
            [%- END -%]
27
        </li>
28
    [% END %]
29
[%- END -%]
(-)a/koha-tmpl/intranet-tmpl/prog/en/includes/transaction_types.inc (+33 lines)
Line 0 Link Here
1
[% USE AuthorisedValues %]
2
[% SET payment_types = [] %]
3
[% FOR pt IN AuthorisedValues.GetAuthValueDropbox('PAYMENT_TYPE') %]
4
    [% NEXT IF pt.authorised_value.grep("^SIP[[:digit:]]{2}$").size() %]
5
    [% payment_types.push(pt) %]
6
[% END %]
7
[% IF payment_types.size > 0 %]
8
    <li>
9
        [% IF Koha.Preference('UseCashRegisters') %]
10
            <label for="[% type %]_type" class="required">[% IF type == 'payment' %]Payment[% ELSE %]Transaction[% END %] type: </label>
11
            <select name="[% type %]_type" id="[% type %]_type" class="required" required="required">
12
                [% IF type == 'refund' %]
13
                <option value="AC">Account credit</option>
14
                [% END %]
15
                [% FOREACH pt IN payment_types %]
16
                    <option value="[% pt.authorised_value | html %]">[% pt.lib | html %]</option>
17
                [% END %]
18
            </select>
19
            <span class="required">Required</span>
20
        [%- ELSE -%]
21
            <label for="[% type %]_type">[% IF type == 'payment' %]Payment[% ELSE %]Transaction[% END %] type: </label>
22
            <select name="[% type %]_type" id="[% type %]_type">
23
                <option value=""></option>
24
                [% IF type == 'refund' %]
25
                <option value="AC">Account credit</option>
26
                [% END %]
27
                [% FOREACH pt IN payment_types %]
28
                    <option value="[% pt.authorised_value | html %]">[% pt.lib | html %]</option>
29
                [% END %]
30
            </select>
31
        [%- END -%]
32
    </li>
33
[% END %]
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/members/boraccount.tt (-29 / +13 lines)
Lines 129-135 Link Here
129
          <button type="button" data-toggle="modal" data-target="#issuePayoutModal" data-account="[%- PROCESS account_type_description account=account -%]" data-accountline="[% account.accountlines_id | html %]" data-amount="[% account.amountoutstanding | $Price %]" class="btn btn-default btn-xs"><i class="fa fa-money"></i> Issue payout</button>
129
          <button type="button" data-toggle="modal" data-target="#issuePayoutModal" data-account="[%- PROCESS account_type_description account=account -%]" data-accountline="[% account.accountlines_id | html %]" data-amount="[% account.amountoutstanding | $Price %]" class="btn btn-default btn-xs"><i class="fa fa-money"></i> Issue payout</button>
130
        [% END %]
130
        [% END %]
131
        [% IF CAN_user_updatecharges_refund && account.is_debit && ( account.amountoutstanding != account.amount ) && !(account.status == 'REFUNDED') && !(account.debit_type_code == 'PAYOUT') %]
131
        [% IF CAN_user_updatecharges_refund && account.is_debit && ( account.amountoutstanding != account.amount ) && !(account.status == 'REFUNDED') && !(account.debit_type_code == 'PAYOUT') %]
132
          <button type="button" data-toggle="modal" data-target="#issueRefundModal" data-item="[%- PROCESS account_type_description account=account -%]" data-accountline="[% account.accountlines_id | html %]" data-amount="[% account.amount | $Price %]" data-amountoutstanding="[% account.amountoutstanding | $Price %]" class="btn btn-default btn-xs"><i class="fa fa-money"></i> Issue refund</button>
132
          <button type="button"  class="btn btn-default btn-xs" data-toggle="modal" data-target="#issueRefundModal" data-item="[%- PROCESS account_type_description account=account -%]" data-accountline="[% account.accountlines_id | html %]" data-amount="[% account.amount | $Price %]" data-amountoutstanding="[% account.amountoutstanding | $Price %]" data-member="[% credit.debit.borrowernumber %]"><i class="fa fa-money"></i> Issue refund</button>
133
        [% END %]
133
        [% END %]
134
        [% IF CAN_user_updatecharges_discount && account.is_debit && ( account.amountoutstanding == account.amount ) && !(account.debit_type_code == 'PAYOUT') %]
134
        [% IF CAN_user_updatecharges_discount && account.is_debit && ( account.amountoutstanding == account.amount ) && !(account.debit_type_code == 'PAYOUT') %]
135
          <button type="button" data-toggle="modal" data-target="#applyDiscountModal" data-item="[%- PROCESS account_type_description account=account -%]" data-accountline="[% account.accountlines_id | html %]" data-amount="[% account.amount | $Price %]" data-amountoutstanding="[% account.amountoutstanding | $Price %]" class="btn btn-default btn-xs">Apply discount</button>
135
          <button type="button" data-toggle="modal" data-target="#applyDiscountModal" data-item="[%- PROCESS account_type_description account=account -%]" data-accountline="[% account.accountlines_id | html %]" data-amount="[% account.amount | $Price %]" data-amountoutstanding="[% account.amountoutstanding | $Price %]" class="btn btn-default btn-xs">Apply discount</button>
Lines 191-210 Link Here
191
                                    <input type="text" inputmode="numeric" pattern="[0-9]*" id="amount" name="amount" required="required">
191
                                    <input type="text" inputmode="numeric" pattern="[0-9]*" id="amount" name="amount" required="required">
192
                                    <span class="required">Required</span>
192
                                    <span class="required">Required</span>
193
                                </li>
193
                                </li>
194
                                [% SET payment_types = AuthorisedValues.GetAuthValueDropbox('PAYMENT_TYPE') %]
194
195
                                [% SET excluded = ['SIP00', 'SIP01', 'SIP02'] %]
195
                                [% INCLUDE 'transaction_types.inc' type="payout" %]
196
                                [% IF payment_types > 3 %]
197
                                <li>
198
                                    <label for="transaction_type">Transaction type: </label>
199
                                    <select name="transaction_type" id="payout_transaction_type">
200
                                        [% FOREACH pt IN payment_types %]
201
                                            [% UNLESS excluded.grep("^$pt.authorised_value\$").size %]
202
                                            <option value="[% pt.authorised_value | html %]">[% pt.lib | html %]</option>
203
                                            [% END %]
204
                                        [% END %]
205
                                    </select>
206
                                </li>
207
                                [% END %]
208
196
209
                                [% IF Koha.Preference('UseCashRegisters') %]
197
                                [% IF Koha.Preference('UseCashRegisters') %]
210
                                <li>
198
                                <li>
Lines 260-277 Link Here
260
                                    <input type="text" inputmode="numeric" pattern="[0-9]*" id="returned" name="amount" required="required">
248
                                    <input type="text" inputmode="numeric" pattern="[0-9]*" id="returned" name="amount" required="required">
261
                                    <span class="required">Required</span>
249
                                    <span class="required">Required</span>
262
                                </li>
250
                                </li>
263
                                [% SET payment_types = AuthorisedValues.GetAuthValueDropbox('PAYMENT_TYPE') %]
251
264
                                <li>
252
                                [% INCLUDE 'transaction_types.inc' type="refund" %]
265
                                    <label for="transaction_type">Transaction type: </label>
266
                                    <select name="transaction_type" id="refund_transaction_type">
267
                                        <option value="AC">Account credit</option>
268
                                        [% IF payment_types %]
269
                                        [% FOREACH pt IN payment_types %]
270
                                        <option value="[% pt.authorised_value | html %]">[% pt.lib | html %]</option>
271
                                        [% END %]
272
                                        [% END %]
273
                                    </select>
274
                                </li>
275
253
276
                                [% IF Koha.Preference('UseCashRegisters') %]
254
                                [% IF Koha.Preference('UseCashRegisters') %]
277
                                <li>
255
                                <li>
Lines 393-403 Link Here
393
                var accountline = button.data('accountline');
371
                var accountline = button.data('accountline');
394
                $('#refundline').val(accountline);
372
                $('#refundline').val(accountline);
395
                var amount = button.data('amount');
373
                var amount = button.data('amount');
396
                var amountoutstanding = button.data('amountoutstanding');
374
                var amountoutstanding = button.data('amountoutstanding') || 0;
397
                var paid = amount - amountoutstanding;
375
                var paid = amount - amountoutstanding;
398
                $("#paid + span").replaceWith(paid);
376
                $("#paid + span").replaceWith(paid);
399
                $("#returned").attr({ "value": paid, "max": paid, "min": 0 });
377
                $("#returned").attr({ "value": paid, "max": paid, "min": 0 });
400
                $("#returned, #refund_transaction_type").focus();
378
                var member = button.data('member');
379
                if ( member === '' ) {
380
                    $("#refund_type option[value='AC']").remove();
381
                } else if ( $("#refund_type option[value='AC']").length == 0 ) {
382
                    $("#refund_type").prepend('<option value="AC" selected="selected">Account credit</option>');
383
                }
384
                $("#returned, #refund_type").focus();
401
            });
385
            });
402
386
403
            $("#applyDiscountModal").on("shown.bs.modal", function(e){
387
            $("#applyDiscountModal").on("shown.bs.modal", function(e){
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/members/paycollect.tt (-3 / +2 lines)
Lines 5-11 Link Here
5
[% USE Registers %]
5
[% USE Registers %]
6
[% USE Price %]
6
[% USE Price %]
7
[% SET footerjs = 1 %]
7
[% SET footerjs = 1 %]
8
[% PROCESS 'payments.inc' %]
9
[% PROCESS 'accounts.inc' %]
8
[% PROCESS 'accounts.inc' %]
10
[% INCLUDE 'doc-head-open.inc' %]
9
[% INCLUDE 'doc-head-open.inc' %]
11
[% BLOCK cash_register_required %]
10
[% BLOCK cash_register_required %]
Lines 167-173 Link Here
167
        <span id="change">0.00</span>
166
        <span id="change">0.00</span>
168
    </li>
167
    </li>
169
168
170
    [% PROCESS account_payment_types %]
169
    [% INCLUDE 'transaction_types.inc' type="payment" %]
171
170
172
    [% IF Koha.Preference('UseCashRegisters') %]
171
    [% IF Koha.Preference('UseCashRegisters') %]
173
    <li>
172
    <li>
Lines 298-304 Link Here
298
            <span id="change">0.00</span>
297
            <span id="change">0.00</span>
299
        </li>
298
        </li>
300
299
301
    [% PROCESS account_payment_types %]
300
    [% INCLUDE 'transaction_types.inc' type="payment" %]
302
301
303
    [% IF Koha.Preference('UseCashRegisters') %]
302
    [% IF Koha.Preference('UseCashRegisters') %]
304
    <li>
303
    <li>
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/pos/pay.tt (-2 / +1 lines)
Lines 6-12 Link Here
6
[% USE TablesSettings %]
6
[% USE TablesSettings %]
7
[% USE Registers %]
7
[% USE Registers %]
8
[% SET footerjs = 1 %]
8
[% SET footerjs = 1 %]
9
[% PROCESS 'payments.inc' %]
10
[% INCLUDE 'doc-head-open.inc' %]
9
[% INCLUDE 'doc-head-open.inc' %]
11
[% SET registers = Registers.all( filters => { current_branch => 1 } ) %]
10
[% SET registers = Registers.all( filters => { current_branch => 1 } ) %]
12
<title>Koha &rsaquo; Payments</title>
11
<title>Koha &rsaquo; Payments</title>
Lines 136-142 Link Here
136
                                <input type="hidden" name="change" value="[% 0 | $Price %]"/>
135
                                <input type="hidden" name="change" value="[% 0 | $Price %]"/>
137
                            </li>
136
                            </li>
138
137
139
                            [% PROCESS account_payment_types %]
138
                            [% INCLUDE 'transaction_types.inc' type="payment" %]
140
139
141
                            <li>
140
                            <li>
142
                                <label for="registerid" class="required">Cash register: </label>
141
                                <label for="registerid" class="required">Cash register: </label>
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/pos/register.tt (-20 / +16 lines)
Lines 114-122 Link Here
114
                                <td></td>
114
                                <td></td>
115
                                <td>
115
                                <td>
116
                                    [% IF CAN_user_cash_management_anonymous_refund && !(credit.debit.status == 'REFUNDED' ) %]
116
                                    [% IF CAN_user_cash_management_anonymous_refund && !(credit.debit.status == 'REFUNDED' ) %]
117
                                    <button type="button" class="btn btn-default btn-xs" data-toggle="modal" data-target="#issueRefundModal" data-item="[%- PROCESS account_type_description account=credit.debit -%]" data-accountline="[% credit.debit.accountlines_id | html %]" data-amount="[% credit.debit.amount | $Price %]" data-quantity="[% credit.debit.note | html %]"><i class="fa fa-money"></i> Issue refund</button>
117
                                    <button type="button" class="btn btn-default btn-xs" data-toggle="modal" data-target="#issueRefundModal" data-item="[%- PROCESS account_type_description account=credit.debit -%]" data-accountline="[% credit.debit.accountlines_id | html %]" data-amount="[% credit.debit.amount | $Price %]" data-amountoutstanding="[% credit.debit.amountoutstanding | $Price %]" data-member="[% credit.debit.borrowernumber %]"><i class="fa fa-money"></i> Issue refund</button>
118
                                    [% ELSIF CAN_user_updatecharges_refund && !(credit.debit.status == 'REFUNDED') && credit.debit.borrowernumber %]
118
                                    [% ELSIF CAN_user_updatecharges_refund && !(credit.debit.status == 'REFUNDED') && credit.debit.borrowernumber %]
119
                                    <button type="button" class="btn btn-default btn-xs" data-toggle="modal" data-target="#issueRefundModal" data-item="[%- PROCESS account_type_description account=credit.debit -%]" data-accountline="[% credit.debit.accountlines_id | html %]" data-amount="[% credit.debit.amount | $Price %]" data-quantity="[% credit.debit.note | html %]"><i class="fa fa-money"></i> Issue refund</button>
119
                                    <button type="button" class="btn btn-default btn-xs" data-toggle="modal" data-target="#issueRefundModal" data-item="[%- PROCESS account_type_description account=credit.debit -%]" data-accountline="[% credit.debit.accountlines_id | html %]" data-amount="[% credit.debit.amount | $Price %]" data-amountoutstanding="[% credit.debit.amountoutstanding | $Price %]" data-member="[% credit.debit.borrowernumber %]"><i class="fa fa-money"></i> Issue refund</button>
120
                                    [% END %]
120
                                    [% END %]
121
                                </td>
121
                                </td>
122
                            </tr>
122
                            </tr>
Lines 202-209 Link Here
202
                                <td>[% credit.debit.amount | $Price %]</td>
202
                                <td>[% credit.debit.amount | $Price %]</td>
203
                                <td></td>
203
                                <td></td>
204
                                <td>
204
                                <td>
205
                                    [% IF CAN_user_cash_management_refund_cash_registers && !(credit.debit.status == 'REFUNDED' ) %]
205
                                    [% IF CAN_user_cash_management_refund_cash_registers && !(credit.debit.status == 'REFUNDED') && !(credit.debit.debit_type_code == 'PAYOUT') %]
206
                                    <button type="button" class="btn btn-default btn-xs pos_refund" data-toggle="modal" data-target="#issueRefundModal" data-item="[%- PROCESS account_type_description account=credit.debit -%]" data-accountline="[% credit.debit.accountlines_id | html %]" data-amount="[% credit.debit.amount | $Price %]" data-quantity="[% credit.debit.note | html %]"><i class="fa fa-money"></i> Issue refund</button>
206
                                    <button type="button" class="btn btn-default btn-xs pos_refund" data-toggle="modal" data-target="#issueRefundModal" data-item="[%- PROCESS account_type_description account=credit.debit -%]" data-accountline="[% credit.debit.accountlines_id | html %]" data-amount="[% credit.debit.amount | $Price %]" data-amountoutstanding="[% credit.debit.amountoutstanding | $Price %]" data-member="[% credit.debit.borrowernumber %]"><i class="fa fa-money"></i> Issue refund</button>
207
                                    [% END %]
207
                                    [% END %]
208
                                </td>
208
                                </td>
209
                            </tr>
209
                            </tr>
Lines 302-320 Link Here
302
                                    <input type="text" inputmode="decimal" pattern="^\d+(\.\d{2})?$" id="returned" name="amount" required="required">
302
                                    <input type="text" inputmode="decimal" pattern="^\d+(\.\d{2})?$" id="returned" name="amount" required="required">
303
                                    <span class="required">Required</span>
303
                                    <span class="required">Required</span>
304
                                </li>
304
                                </li>
305
                                [% SET payment_types = [] %]
305
                                [% INCLUDE 'transaction_types.inc' type="refund" %]
306
                                [% FOR pt IN AuthorisedValues.GetAuthValueDropbox('PAYMENT_TYPE') %]
307
                                    [% NEXT IF pt.authorised_value.grep("^SIP[[:digit:]]{2}$").size() %]
308
                                    [% payment_types.push(pt) %]
309
                                [% END %]
310
                                <li>
311
                                    <label for="transaction_type">Transaction type: </label>
312
                                    <select name="transaction_type" id="transaction_type">
313
                                        [% FOREACH pt IN payment_types %]
314
                                            <option value="[% pt.authorised_value | html %]">[% pt.lib | html %]</option>
315
                                        [% END %]
316
                                    </select>
317
                                </li>
318
                            </ol>
306
                            </ol>
319
                        </fieldset> <!-- /.rows -->
307
                        </fieldset> <!-- /.rows -->
320
                    </div> <!-- /.modal-body -->
308
                    </div> <!-- /.modal-body -->
Lines 390-398 Link Here
390
           var accountline = button.data('accountline');
378
           var accountline = button.data('accountline');
391
           $('#refundline').val(accountline);
379
           $('#refundline').val(accountline);
392
           var amount = button.data('amount');
380
           var amount = button.data('amount');
393
           $("#paid + span").replaceWith(amount);
381
           var amountoutstanding = button.data('amountoutstanding') || 0;
394
           $("#returned").attr({ "value": amount, "max": amount });
382
           var paid = amount - amountoutstanding;
395
           $("#returned, #transaction_type").focus();
383
           $("#paid + span").replaceWith(paid);
384
           $("#returned").attr({ "value": paid, "max": paid });
385
           var member = button.data('member');
386
           if ( member === '' ) {
387
               $("#refund_type option[value='AC']").remove();
388
           } else if ( $("#refund_type option[value='AC']").length == 0 ) {
389
               $("#refund_type").prepend('<option value="AC" selected="selected">Account credit</option>');
390
           }
391
           $("#returned, #refund_type").focus();
396
        });
392
        });
397
393
398
        $(".printReceipt").click(function() {
394
        $(".printReceipt").click(function() {
(-)a/members/boraccount.pl (-5 / +5 lines)
Lines 79-90 if ( $action eq 'payout' ) { Link Here
79
    my $payment_id        = scalar $input->param('accountlines_id');
79
    my $payment_id        = scalar $input->param('accountlines_id');
80
    my $payment           = Koha::Account::Lines->find($payment_id);
80
    my $payment           = Koha::Account::Lines->find($payment_id);
81
    my $amount           = scalar $input->param('amount');
81
    my $amount           = scalar $input->param('amount');
82
    my $transaction_type = scalar $input->param('transaction_type');
82
    my $payout_type = scalar $input->param('payout_type');
83
    $schema->txn_do(
83
    $schema->txn_do(
84
        sub {
84
        sub {
85
            my $payout = $payment->payout(
85
            my $payout = $payment->payout(
86
                {
86
                {
87
                    payout_type   => $transaction_type,
87
                    payout_type   => $payout_type,
88
                    branch        => $library_id,
88
                    branch        => $library_id,
89
                    staff_id      => $logged_in_user->id,
89
                    staff_id      => $logged_in_user->id,
90
                    cash_register => $registerid,
90
                    cash_register => $registerid,
Lines 100-106 if ( $action eq 'refund' ) { Link Here
100
    my $charge_id        = scalar $input->param('accountlines_id');
100
    my $charge_id        = scalar $input->param('accountlines_id');
101
    my $charge           = Koha::Account::Lines->find($charge_id);
101
    my $charge           = Koha::Account::Lines->find($charge_id);
102
    my $amount           = scalar $input->param('amount');
102
    my $amount           = scalar $input->param('amount');
103
    my $transaction_type = scalar $input->param('transaction_type');
103
    my $refund_type = scalar $input->param('refund_type');
104
    $schema->txn_do(
104
    $schema->txn_do(
105
        sub {
105
        sub {
106
106
Lines 113-122 if ( $action eq 'refund' ) { Link Here
113
                    amount         => $amount
113
                    amount         => $amount
114
                }
114
                }
115
            );
115
            );
116
            unless ( $transaction_type eq 'AC' ) {
116
            unless ( $refund_type eq 'AC' ) {
117
                my $payout = $refund->payout(
117
                my $payout = $refund->payout(
118
                    {
118
                    {
119
                        payout_type   => $transaction_type,
119
                        payout_type   => $refund_type,
120
                        branch        => $library_id,
120
                        branch        => $library_id,
121
                        staff_id      => $logged_in_user->id,
121
                        staff_id      => $logged_in_user->id,
122
                        cash_register => $registerid,
122
                        cash_register => $registerid,
(-)a/pos/register.pl (-3 / +2 lines)
Lines 119-125 else { Link Here
119
            my $amount           = $input->param('amount');
119
            my $amount           = $input->param('amount');
120
            my $quantity         = $input->param('quantity');
120
            my $quantity         = $input->param('quantity');
121
            my $accountline_id   = $input->param('accountline');
121
            my $accountline_id   = $input->param('accountline');
122
            my $transaction_type = $input->param('transaction_type');
122
            my $refund_type      = $input->param('refund_type');
123
123
124
            my $accountline = Koha::Account::Lines->find($accountline_id);
124
            my $accountline = Koha::Account::Lines->find($accountline_id);
125
            $schema->txn_do(
125
            $schema->txn_do(
Lines 136-142 else { Link Here
136
                    );
136
                    );
137
                    my $payout = $refund->payout(
137
                    my $payout = $refund->payout(
138
                        {
138
                        {
139
                            payout_type   => $transaction_type,
139
                            payout_type   => $refund_type,
140
                            branch        => $library_id,
140
                            branch        => $library_id,
141
                            staff_id      => $logged_in_user->id,
141
                            staff_id      => $logged_in_user->id,
142
                            cash_register => $cash_register->id,
142
                            cash_register => $cash_register->id,
143
- 

Return to bug 27796