Bug 17586: Add the Koha::Account::Lines->get_balance method
authorJonathan Druart <jonathan.druart@bugs.koha-community.org>
Tue, 8 Nov 2016 13:50:10 +0000 (13:50 +0000)
committerKyle M Hall <kyle@bywatersolutions.com>
Fri, 16 Dec 2016 14:49:17 +0000 (14:49 +0000)
Test plan:
  prove t/db_dependent/Accounts.t
should return green

Signed-off-by: Josef Moravec <josef.moravec@gmail.com>
Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
Signed-off-by: Kyle M Hall <kyle@bywatersolutions.com>
Koha/Account/Lines.pm
t/db_dependent/Accounts.t

index 0e0677c..aa54e0c 100644 (file)
@@ -36,6 +36,26 @@ Koha::Account::Lines - Koha Account Line Object set class
 
 =cut
 
+=head3 get_balance
+
+my $balance = $self->get_balance
+
+Return the balance (sum of amountoutstanding columns)
+
+=cut
+
+sub get_balance {
+    my ($self) = @_;
+    my $fines = $self->search(
+        {},
+        {
+            select => [ { sum => 'amountoutstanding' } ],
+            as => ['total_amountoutstanding']
+        }
+    );
+    return $fines->count ? $fines->next->get_column('total_amountoutstanding') : 0;
+}
+
 =head3 type
 
 =cut
index e8b4a03..f9d1d80 100644 (file)
@@ -18,7 +18,7 @@
 
 use Modern::Perl;
 
-use Test::More tests => 19;
+use Test::More tests => 20;
 use Test::MockModule;
 use Test::Warn;
 
@@ -365,4 +365,39 @@ subtest "makepartialpayment() tests" => sub {
     }
 };
 
+subtest 'get_balance' => sub {
+    plan tests => 2;
+
+    my $patron = $builder->build({source => 'Borrower'});
+    $patron = Koha::Patrons->find( $patron->{borrowernumber} );
+    my $account_lines = $patron->get_account_lines;
+    is( $account_lines->get_balance, 0, 'get_balance should return 0 if the patron does not have fines' );
+
+    my $accountline_1 = $builder->build(
+        {
+            source => 'Accountline',
+            value  => {
+                borrowernumber    => $patron->borrowernumber,
+                amount            => 42,
+                amountoutstanding => 42
+            }
+        }
+    );
+    my $accountline_2 = $builder->build(
+        {
+            source => 'Accountline',
+            value  => {
+                borrowernumber    => $patron->borrowernumber,
+                amount            => -13,
+                amountoutstanding => -13
+            }
+        }
+    );
+
+    my $balance = $patron->get_account_lines->get_balance;
+    is( int($balance), 29, 'get_balance should return the correct value');
+
+    $patron->delete;
+};
+
 1;