Bug 33216: Catch and handle RegisterRequired exceptions for SIP fee paid messages

If registers are being used in Koha, they are required. If a SIP account has no register and a fee paid message is sent, the SIP server crashes and the client never gets a response. It would be much better if Koha would response with 38 response where "payment accepted" is N, and an AF field stating that the SIP account needs to be associated with a register.

Test Plan:
1) Enable UseCashRegisters, set RequireCashRegister to "always require a
   cash register". Do *not* set a cash register for the SIP account you
   will be testing with.
2) Using the SIP cli tester, send a fee paid message for a patron owing
   fees.
3) Note the lack of a SIP response
4) Apply this patch
5) Restart the SIP server
6) Repeat step 2, you should now get a SIP response with the error
   message in it!

Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>
Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
(cherry picked from commit 0411bf0573)
Signed-off-by: Jacob O'Mara <jacobomara901@gmail.com>
This commit is contained in:
Kyle Hall 2023-03-14 07:06:21 -04:00 committed by Jacob O'Mara
parent 3dbbe2b627
commit c6610d5ed9
3 changed files with 26 additions and 4 deletions

View file

@ -284,7 +284,8 @@ sub pay_fee {
return {
status => $trans,
pay_response => $trans_result->{pay_response}
pay_response => $trans_result->{pay_response},
error => $trans_result->{error},
};
}

View file

@ -20,6 +20,8 @@ use strict;
# You should have received a copy of the GNU General Public License
# along with Koha; if not, see <http://www.gnu.org/licenses>.
use Try::Tiny;
use Koha::Account;
use Koha::Account::Lines;
@ -76,10 +78,28 @@ sub pay {
};
}
}
my $pay_response = $account->pay($pay_options);
my $ok = 1;
my $pay_response;
my $error;
try {
$pay_response = $account->pay($pay_options);
}
catch {
$ok = 0;
if ( ref($_) =~ /^Koha::Exceptions/ ) {
$error = $_->description;
}
else {
$_->rethrow;
}
};
return {
ok => 1,
pay_response => $pay_response
ok => $ok,
pay_response => $pay_response,
error => $error,
};
}

View file

@ -1194,6 +1194,7 @@ sub handle_fee_paid {
$resp .= add_field( FID_INST_ID, $inst_id, $server );
$resp .= add_field( FID_PATRON_ID, $patron_id, $server );
$resp .= maybe_add( FID_TRANSACTION_ID, $status->transaction_id, $server );
$resp .= maybe_add( FID_SCREEN_MSG, $pay_result->{error}, $server );
$resp .= maybe_add( FID_SCREEN_MSG, $status->screen_msg, $server );
$resp .= maybe_add( FID_PRINT_LINE, $status->print_line, $server );