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

(-)a/Koha/Account/Line.pm (-1 / +89 lines)
Lines 278-283 sub apply { Link Here
278
    return $available_credit;
278
    return $available_credit;
279
}
279
}
280
280
281
=head3 payout
282
283
  $credit_accountline->payout(
284
    {
285
        payout_type => $payout_type,
286
        register_id => $register_id,
287
        amount      => $amount
288
    }
289
  );
290
291
Used to 'pay out' a credit to a user.
292
293
Payout type may be one of any existing payment types
294
295
=cut
296
297
sub payout {
298
    my ( $self, $params ) = @_;
299
300
    # Make sure it is a credit we are paying out
301
    unless ( $self->is_credit ) {
302
        Koha::Exceptions::Account::IsNotCredit->throw(
303
            error => 'Account line ' . $self->id . ' is not a credit' );
304
    }
305
306
    unless ( $params->{interface} ) {
307
        Koha::Exceptions::MissingParameter->throw(
308
            error => 'The interface parameter is mandatory' );
309
    }
310
311
    # Make sure there is outstanding credit to pay out
312
    my $amount =
313
      $params->{amount} ? $params->{amount} : $self->amountoutstanding;
314
    return unless $self->amountoutstanding >= $amount;
315
316
    # Make sure we record the cash register for cash transactions
317
    Koha::Exceptions::Account::RegisterRequired->throw()
318
      if ( C4::Context->preference("UseCashRegisters")
319
        && defined( $params->{payout_type} )
320
        && ( $params->{payout_type} eq 'CASH' )
321
        && !defined( $params->{cash_register} ) );
322
323
    $params->{branch} //= $self->branchcode;
324
325
    my $payout;
326
    $self->_result->result_source->schema->txn_do(
327
        sub {
328
329
            # A 'payout' is a 'debit'
330
            $payout = Koha::Account::Line->new(
331
                {
332
                    date              => \'NOW()',
333
                    amount            => 0 - $amount,
334
                    debit_type_code   => 'PAYOUT',
335
                    payment_type      => $params->{payout_type},
336
                    amountoutstanding => 0,
337
                    manager_id        => $params->{staff_id},
338
                    borrowernumber    => $params->{patron_id},
339
                    interface         => $params->{interface},
340
                    branchcode        => $params->{branch},
341
                    register_id       => $params->{cash_register},
342
                    note              => $params->{quantity}
343
                }
344
            )->store();
345
346
            my $payout_offset = Koha::Account::Offset->new(
347
                {
348
                    debit_id => $payout->accountlines_id,
349
                    type     => 'PAYOUT',
350
                    amount   => 0 - $amount
351
                }
352
            )->store();
353
354
            my $application_offset = Koha::Account::Offset->new(
355
                {
356
                    debit_id  => $payout->accountlines_id,
357
                    credit_id => $self->accountlines_id,
358
                    type      => 'PAYOUT',
359
                    amount    => 0 - $amount
360
                }
361
            )->store();
362
363
            $self->status('PAID')->store;
364
        }
365
    );
366
367
    return $payout;
368
}
369
281
=head3 adjust
370
=head3 adjust
282
371
283
This method allows updating a debit or credit on a patron's account
372
This method allows updating a debit or credit on a patron's account
284
- 

Return to bug 24080