Bug 11773: fix crash in sco-main.pl if no active currency is set
authorMarc Véron <veron@veron.ch>
Sat, 15 Feb 2014 16:07:55 +0000 (17:07 +0100)
committerGalen Charlton <gmc@esilibrary.com>
Tue, 18 Feb 2014 21:03:30 +0000 (21:03 +0000)
If no currency is defined as active and a patron with debts tries to
check out in welf checkout moduel, sco-main.pl crashes with:

Software error:
Can't use an undefined value as a HASH reference at /usr/share/kohaclone/opac/sco/sco-main.pl line 190.

This patch tests for active currency and simply does not display a
currency symbol if appropriate.

Test plan:

1) Make sure you have a patron with debts and no currency defined as
   active.  (Home › Administration › Currencies & Exchange rates
   › Currencies )
2) Go to Self checkout module and try to checkout an item to this patron
   Result: Crash with error message "Can't use an undefined value as a
   HASH..."
3) Apply patch
4) Reload and try to checkout again
   Expected result: Message "You owe the library..." without currency
   symbol
5) Define a currency as active and try to checkout again
   Expected result: Message "You owe..." with currency symbol

Signed-off-by: Chris Cormack <chris@bigballofwax.co.nz>
Signed-off-by: Jonathan Druart <jonathan.druart@biblibre.com>
Signed-off-by: Galen Charlton <gmc@esilibrary.com>

opac/sco/sco-main.pl

index d1234a0..14f74b5 100755 (executable)
@@ -111,6 +111,10 @@ if (C4::Context->preference('SelfCheckoutByLogin') && !$patronid) {
 }
 my $borrower = GetMemberDetails(undef,$patronid);
 
+my $currencySymbol = "";
+if ( defined C4::Budgets->GetCurrency() ) {
+    $currencySymbol = C4::Budgets->GetCurrency()->{symbol};
+}
 
 my $branch = $issuer->{branchcode};
 my $confirm_required = 0;
@@ -154,7 +158,7 @@ elsif ( $op eq "checkout" ) {
             hide_main                 => 1,
         );
         if ($issue_error eq 'DEBT') {
-            $template->param(amount => C4::Budgets->GetCurrency()->{symbol}.$impossible->{DEBT});
+            $template->param(amount => $currencySymbol.$impossible->{DEBT});
         }
         #warn "issue_error: " . $issue_error ;
         if ( $issue_error eq "NO_MORE_RENEWALS" ) {
@@ -187,7 +191,7 @@ elsif ( $op eq "checkout" ) {
             hide_main                 => 1,
         );
         if ($issue_error eq 'DEBT') {
-            $template->param(amount => C4::Budgets->GetCurrency()->{symbol}.$needconfirm->{DEBT});
+            $template->param(amount => $currencySymbol.$needconfirm->{DEBT});
         }
     } else {
         if ( $confirmed || $issuenoconfirm ) {    # we'll want to call getpatroninfo again to get updated issues.