use OpenILS::SIP::Transaction::Checkout;
use OpenILS::SIP::Transaction::Checkin;
use OpenILS::SIP::Transaction::Renew;
+use OpenILS::SIP::Transaction::FeePayment;
use OpenSRF::System;
use OpenILS::Utils::Fieldmapper;
my ($self, $patron_id, $patron_pwd, $fee_amt, $fee_type,
$pay_type, $fee_id, $trans_id, $currency) = @_;
- my $xact = OpenILS::SIP::Transaction::FeePayment->new(authtoken => $self->authtoken);
+ my $xact = OpenILS::SIP::Transaction::FeePayment->new(authtoken => $self->{authtoken});
my $patron = $self->find_patron($patron_id);
if (!$patron) {
- $xact->screen_msg("Invalid Patron Barcode '$patron_id'");
- $xact->ok(0);
- return $xact;
+ $xact->screen_msg("Invalid Patron Barcode '$patron_id'");
+ $xact->ok(0);
+ return $xact;
}
$xact->patron($patron);
my $element;
foreach $element (keys %fields) {
- $self->{_permitted}->{$element} = $fields{$element};
+ $self->{_permitted}->{$element} = $fields{$element};
}
@{$self}{keys %fields} = values %fields;
sub do_fee_payment {
my $self = shift;
- my $results = $U->simplereq('open-ils.actor', 'open-ils.actor.user.transactions.history.have_balance', $self->{authtoken}, $self->patron->id);
+ my $results = $U->simplereq('open-ils.actor', 'open-ils.actor.user.transactions.history.have_balance', $self->{authtoken}, $self->patron->internal_id);
if (ref $results eq 'ARRAY') {
- my $bill;
- my $payment = $self->fee_amount;
- foreach $bill (@{$results}) {
- if (!$self->transaction_id) {
- if ($bill->balance_owed >= $payment) {
- $self->pay_bill($bill->id, $payment);
- $payment = 0;
- }
- else {
- $self->pay_bill($bill->id, $bill->balance_owed);
- $payment -= $bill->balance_owed;
- }
- last unless ($payment);
- }
- elsif ($self->transaction_id == $bill->id) {
- $self->pay_bill($bill->id, $payment);
- $payment = 0;
- last;
- }
- }
- if ($payment == $self->fee_amount) {
- $self->ok(0);
- if (!$self->transaction_id) {
- $self->screen_msg("Payment failed: you have no bills.");
- }
- else {
- $self->screen_msg("Payment failed: transaction " + $self->transaction_id + " not found.");
- }
- }
- else {
- $self->ok(1);
- }
+ syslog('LOG_INFO', scalar @$results . " bills found for " . $self->patron->internal_id);
+ my $bill;
+ my $payment = $self->fee_amount;
+ foreach $bill (@{$results}) {
+ syslog('LOG_INFO', 'bill '. $bill->id . ' amount ' . $bill->balance_owed);
+ if (!$self->transaction_id) {
+ if ($bill->balance_owed >= $payment) {
+ $self->pay_bill($bill->id, $payment);
+ $payment = 0;
+ }
+ else {
+ $self->pay_bill($bill->id, $bill->balance_owed);
+ $payment -= $bill->balance_owed;
+ }
+ last unless ($payment);
+ }
+ elsif ($self->transaction_id == $bill->id) {
+ $self->pay_bill($bill->id, $payment);
+ $payment = 0;
+ last;
+ }
+ }
+ if ($payment == $self->fee_amount) {
+ $self->ok(0);
+ if (!$self->transaction_id) {
+ $self->screen_msg("Payment failed: you have no bills.");
+ }
+ else {
+ $self->screen_msg("Payment failed: transaction " + $self->transaction_id + " not found.");
+ }
+ }
+ else {
+ $self->ok(1);
+ }
}
else {
- $self->ok(0);
- $self->screen_msg($results->{descr});
+ $self->ok(0);
+ $self->screen_msg($results->{descr});
}
}
sub pay_bill
{
- my ($bill, $amount) = @_;
- my $user = $self->patron;
+ my ($self, $bill, $amount) = @_;
+ my $user = $self->patron->{user};
my $r = $U->simplereq('open-ils.circ', 'open-ils.circ.money.payment', $self->{authtoken},
- { payment_type => "cash_payment", userid => $user->id, note => "via SIP2",
- payments => [[$bill, $amount ]]}, $user->last_xact_id);
- $self->patron->last_xact_id($r->last_xact_id) if ($r->last_xact_id);
+ { payment_type => "cash_payment", userid => $user->id, note => "via SIP2",
+ payments => [[$bill, $amount ]]}, $user->last_xact_id);
}