Lines 334-341
sub add_credit {
Link Here
|
334 |
|
334 |
|
335 |
my ( $self, $params ) = @_; |
335 |
my ( $self, $params ) = @_; |
336 |
|
336 |
|
337 |
# amount is passed as a positive value, but we store credit as negative values |
337 |
# check for mandatory params |
338 |
my $amount = $params->{amount} * -1; |
338 |
my @mandatory = ( 'interface', 'amount' ); |
|
|
339 |
for my $param (@mandatory) { |
340 |
unless ( defined( $params->{$param} ) ) { |
341 |
Koha::Exceptions::MissingParameter->throw( |
342 |
error => "The $param parameter is mandatory" ); |
343 |
} |
344 |
} |
345 |
|
346 |
# amount should always be passed as a positive value |
347 |
my $amount = $params->{amount} * -1; |
348 |
unless ( $amount < 0 ) { |
349 |
Koha::Exceptions::Account::AmountNotPositive->throw( |
350 |
error => 'Debit amount passed is not positive' ); |
351 |
} |
352 |
|
339 |
my $description = $params->{description} // q{}; |
353 |
my $description = $params->{description} // q{}; |
340 |
my $note = $params->{note} // q{}; |
354 |
my $note = $params->{note} // q{}; |
341 |
my $user_id = $params->{user_id}; |
355 |
my $user_id = $params->{user_id}; |
Lines 343-427
sub add_credit {
Link Here
|
343 |
my $library_id = $params->{library_id}; |
357 |
my $library_id = $params->{library_id}; |
344 |
my $cash_register = $params->{cash_register}; |
358 |
my $cash_register = $params->{cash_register}; |
345 |
my $payment_type = $params->{payment_type}; |
359 |
my $payment_type = $params->{payment_type}; |
346 |
my $type = $params->{type} || 'PAYMENT'; |
360 |
my $credit_type = $params->{type} || 'PAYMENT'; |
347 |
my $item_id = $params->{item_id}; |
361 |
my $item_id = $params->{item_id}; |
348 |
|
362 |
|
349 |
unless ( $interface ) { |
|
|
350 |
Koha::Exceptions::MissingParameter->throw( |
351 |
error => 'The interface parameter is mandatory' |
352 |
); |
353 |
} |
354 |
|
355 |
Koha::Exceptions::Account::RegisterRequired->throw() |
363 |
Koha::Exceptions::Account::RegisterRequired->throw() |
356 |
if ( C4::Context->preference("UseCashRegisters") |
364 |
if ( C4::Context->preference("UseCashRegisters") |
357 |
&& defined($payment_type) |
365 |
&& defined($payment_type) |
358 |
&& ( $payment_type eq 'CASH' ) |
366 |
&& ( $payment_type eq 'CASH' ) |
359 |
&& !defined($cash_register) ); |
367 |
&& !defined($cash_register) ); |
360 |
|
368 |
|
361 |
my $schema = Koha::Database->new->schema; |
|
|
362 |
|
363 |
my $credit_type = $Koha::Account::account_type_credit->{$type}; |
364 |
my $line; |
369 |
my $line; |
|
|
370 |
my $schema = Koha::Database->new->schema; |
371 |
try { |
372 |
$schema->txn_do( |
373 |
sub { |
365 |
|
374 |
|
366 |
$schema->txn_do( |
375 |
# Insert the account line |
367 |
sub { |
376 |
$line = Koha::Account::Line->new( |
|
|
377 |
{ |
378 |
borrowernumber => $self->{patron_id}, |
379 |
date => \'NOW()', |
380 |
amount => $amount, |
381 |
description => $description, |
382 |
credit_type_code => $credit_type, |
383 |
amountoutstanding => $amount, |
384 |
payment_type => $payment_type, |
385 |
note => $note, |
386 |
manager_id => $user_id, |
387 |
interface => $interface, |
388 |
branchcode => $library_id, |
389 |
register_id => $cash_register, |
390 |
itemnumber => $item_id, |
391 |
} |
392 |
)->store(); |
368 |
|
393 |
|
369 |
# Insert the account line |
394 |
# Record the account offset |
370 |
$line = Koha::Account::Line->new( |
395 |
my $account_offset = Koha::Account::Offset->new( |
371 |
{ borrowernumber => $self->{patron_id}, |
396 |
{ |
372 |
date => \'NOW()', |
397 |
credit_id => $line->id, |
373 |
amount => $amount, |
398 |
type => $Koha::Account::offset_type->{$credit_type}, |
374 |
description => $description, |
399 |
amount => $amount |
375 |
credit_type_code => $credit_type, |
400 |
} |
376 |
amountoutstanding => $amount, |
401 |
)->store(); |
377 |
payment_type => $payment_type, |
|
|
378 |
note => $note, |
379 |
manager_id => $user_id, |
380 |
interface => $interface, |
381 |
branchcode => $library_id, |
382 |
register_id => $cash_register, |
383 |
itemnumber => $item_id, |
384 |
} |
385 |
)->store(); |
386 |
|
402 |
|
387 |
# Record the account offset |
403 |
UpdateStats( |
388 |
my $account_offset = Koha::Account::Offset->new( |
404 |
{ |
389 |
{ credit_id => $line->id, |
405 |
branch => $library_id, |
390 |
type => $Koha::Account::offset_type->{$type}, |
406 |
type => $credit_type, |
391 |
amount => $amount |
407 |
amount => $amount, |
392 |
} |
408 |
borrowernumber => $self->{patron_id}, |
393 |
)->store(); |
409 |
} |
|
|
410 |
) if grep { $credit_type eq $_ } ( 'PAYMENT', 'WRITEOFF' ); |
394 |
|
411 |
|
395 |
UpdateStats( |
412 |
if ( C4::Context->preference("FinesLog") ) { |
396 |
{ branch => $library_id, |
413 |
logaction( |
397 |
type => $type, |
414 |
"FINES", 'CREATE', |
398 |
amount => $amount, |
415 |
$self->{patron_id}, |
399 |
borrowernumber => $self->{patron_id}, |
416 |
Dumper( |
|
|
417 |
{ |
418 |
action => "create_$credit_type", |
419 |
borrowernumber => $self->{patron_id}, |
420 |
amount => $amount, |
421 |
description => $description, |
422 |
amountoutstanding => $amount, |
423 |
credit_type_code => $credit_type, |
424 |
note => $note, |
425 |
itemnumber => $item_id, |
426 |
manager_id => $user_id, |
427 |
branchcode => $library_id, |
428 |
} |
429 |
), |
430 |
$interface |
431 |
); |
400 |
} |
432 |
} |
401 |
) if grep { $type eq $_ } ('PAYMENT', 'WRITEOFF') ; |
433 |
} |
402 |
|
434 |
); |
403 |
if ( C4::Context->preference("FinesLog") ) { |
435 |
} |
404 |
logaction( |
436 |
catch { |
405 |
"FINES", 'CREATE', |
437 |
if ( ref($_) eq 'Koha::Exceptions::Object::FKConstraint' ) { |
406 |
$self->{patron_id}, |
438 |
if ( $_->broken_fk eq 'credit_type_code' ) { |
407 |
Dumper( |
439 |
Koha::Exceptions::Account::UnrecognisedType->throw( |
408 |
{ action => "create_$type", |
440 |
error => 'Type of credit not recognised' ); |
409 |
borrowernumber => $self->{patron_id}, |
441 |
} |
410 |
amount => $amount, |
442 |
else { |
411 |
description => $description, |
443 |
$_->rethrow; |
412 |
amountoutstanding => $amount, |
|
|
413 |
credit_type_code => $credit_type, |
414 |
note => $note, |
415 |
itemnumber => $item_id, |
416 |
manager_id => $user_id, |
417 |
branchcode => $library_id, |
418 |
} |
419 |
), |
420 |
$interface |
421 |
); |
422 |
} |
444 |
} |
423 |
} |
445 |
} |
424 |
); |
446 |
}; |
425 |
|
447 |
|
426 |
return $line; |
448 |
return $line; |
427 |
} |
449 |
} |
Lines 734-751
our $offset_type = {
Link Here
|
734 |
'RESERVE_EXPIRED' => 'Hold Expired' |
756 |
'RESERVE_EXPIRED' => 'Hold Expired' |
735 |
}; |
757 |
}; |
736 |
|
758 |
|
737 |
=head3 $account_type_credit |
|
|
738 |
|
739 |
=cut |
740 |
|
741 |
our $account_type_credit = { |
742 |
'CREDIT' => 'CREDIT', |
743 |
'FORGIVEN' => 'FORGIVEN', |
744 |
'LOST_RETURN' => 'LOST_RETURN', |
745 |
'PAYMENT' => 'PAYMENT', |
746 |
'WRITEOFF' => 'WRITEOFF' |
747 |
}; |
748 |
|
749 |
=head1 AUTHORS |
759 |
=head1 AUTHORS |
750 |
|
760 |
|
751 |
=encoding utf8 |
761 |
=encoding utf8 |