Bug 22435: Fix _set_found_trigger
authorMartin Renvoize <martin.renvoize@ptfs-europe.com>
Fri, 14 May 2021 13:04:35 +0000 (14:04 +0100)
committerJonathan Druart <jonathan.druart@bugs.koha-community.org>
Wed, 4 Aug 2021 12:06:43 +0000 (14:06 +0200)
The _set_found_trigger utilised the 'Writeoff' offset type to
distinguish between the application of a writeoff and any other form of
offset application.

This patch updates the trigger to use the full link through from offset
to account credit line to get the credit type being offset.

Test plan
1/ Run t/db_dependent/Koha/Items.t and prove it fails before the patch,
but passes after applying this patch.
2/ Run t/db_dependent/Koha/Account/Offsets.t and prove it passes both
before and after applying this patch.

Signed-off-by: Victor Grousset/tuxayo <victor@tuxayo.net>
Signed-off-by: Nick Clemens <nick@bywatersolutions.com>
Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org>
Koha/Account/Line.pm
Koha/Account/Offsets.pm
Koha/Item.pm
t/db_dependent/Koha/Account/Offsets.t

index 13e9b07..a05ab65 100644 (file)
@@ -131,8 +131,8 @@ Return the credit_offsets linked to this account line if some exist
 =cut
 
 sub credit_offsets {
-    my ( $self ) = @_;
-    my $rs = $self->_result->account_offsets_credits;
+    my ( $self, $cond, $attr ) = @_;
+    my $rs = $self->_result->search_related( 'account_offsets_credits', $cond, $attr);
     return unless $rs;
     return Koha::Account::Offsets->_new_from_dbic($rs);
 }
@@ -144,8 +144,8 @@ Return the debit_offsets linked to this account line if some exist
 =cut
 
 sub debit_offsets {
-    my ( $self ) = @_;
-    my $rs = $self->_result->account_offsets_debits;
+    my ( $self, $cond, $attr ) = @_;
+    my $rs = $self->_result->search_related( 'account_offsets_debits', $cond, $attr);
     return unless $rs;
     return Koha::Account::Offsets->_new_from_dbic($rs);
 }
index 6a40196..e288411 100644 (file)
@@ -50,7 +50,7 @@ sub total {
     my $offsets = $self->search(
         {},
         {
-            select => [ { sum => 'amount' } ],
+            select => [ { sum => 'me.amount' } ],
             as     => ['total_amount'],
         }
     );
index c653dc2..ca17ed0 100644 (file)
@@ -1004,17 +1004,16 @@ sub _set_found_trigger {
                     # some amount has been cancelled. collect the offsets that are not writeoffs
                     # this works because the only way to subtract from this kind of a debt is
                     # using the UI buttons 'Pay' and 'Write off'
-                    my $credits_offsets = Koha::Account::Offsets->search(
+                    my $credit_offsets = $lost_charge->debit_offsets(
                         {
-                            debit_id  => $lost_charge->id,
-                            credit_id => { '!=' => undef },     # it is not the debit itself
-                            type      => { '!=' => 'Writeoff' },
-                            amount    => { '<' => 0 }    # credits are negative on the DB
-                        }
+                            'credit_id'               => { '!=' => undef },
+                            'credit.credit_type_code' => { '!=' => 'Writeoff' }
+                        },
+                        { join => 'credit' }
                     );
 
-                    $total_to_refund = ( $credits_offsets->count > 0 )
-                      ? $credits_offsets->total * -1    # credits are negative on the DB
+                    $total_to_refund = ( $credit_offsets->count > 0 )
+                      ? $credit_offsets->total * -1    # credits are negative on the DB
                       : 0;
                 }
 
index 7e5e33f..cc271b5 100755 (executable)
@@ -29,7 +29,7 @@ use t::lib::TestBuilder;
 my $schema  = Koha::Database->new->schema;
 my $builder = t::lib::TestBuilder->new;
 
-subtest 'total_outstanding() tests' => sub {
+subtest 'total() tests' => sub {
 
     plan tests => 4;