Bug 27424: DBRev 22.12.00.002
[srvgit] / Koha / Clubs.pm
index fff88d8..2f60648 100644 (file)
@@ -4,24 +4,24 @@ package Koha::Clubs;
 #
 # This file is part of Koha.
 #
-# Koha is free software; you can redistribute it and/or modify it under the
-# terms of the GNU General Public License as published by the Free Software
-# Foundation; either version 3 of the License, or (at your option) any later
-# version.
+# Koha is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
 #
-# Koha is distributed in the hope that it will be useful, but WITHOUT ANY
-# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
-# A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
+# Koha is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
 #
-# You should have received a copy of the GNU General Public License along
-# with Koha; if not, write to the Free Software Foundation, Inc.,
-# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+# You should have received a copy of the GNU General Public License
+# along with Koha; if not, see <http://www.gnu.org/licenses>.
 
 use Modern::Perl;
 
-use Carp;
 
 use Koha::Database;
+use Koha::DateUtils qw( dt_from_string );
 
 use Koha::Club;
 
@@ -50,25 +50,51 @@ sub get_enrollable {
     my $borrower = $params->{borrower};
     if ($borrower) {
         delete( $params->{borrower} );
-        my @enrollments = $borrower->get_club_enrollments();
+        my @enrollments = $borrower->get_club_enrollments->as_list;
         if (@enrollments) {
             $params->{'me.id'} = { -not_in => [ map { $_->club()->id() } @enrollments ] };
         }
     }
 
-    my $rs = $self->_resultset()->search( $params, { prefetch => 'club_template' } );
+    my $dtf = Koha::Database->new->schema->storage->datetime_parser;
+
+    # Only clubs with no end date or an end date in the future can be enrolled in
+    $params->{'-and'} = [
+        -or => [
+            date_end => { '>=' => $dtf->format_datetime( dt_from_string() ) },
+            date_end => undef,
+        ],
+        -or => [
+            'me.branchcode' => $borrower->branchcode,
+            'me.branchcode' => undef,
+        ]
+    ];
+
+    return $self->search( $params, { prefetch => 'club_template' } );
+}
 
-    if (wantarray) {
-        my $class = ref($self) ? ref($self) : $self;
+=head3 filter_out_empty
 
-        return $class->_wrap( $rs->all() );
+    my $filtered_rs = $clubs_rs->filter_out_empty;
 
-    }
-    else {
-        my $class = ref($self) ? ref($self) : $self;
+Return a new I<Koha::Clubs> resultset, containing only clubs with current enrollments.
 
-        return $class->_new_from_dbic($rs);
-    }
+=cut
+
+sub filter_out_empty {
+    my ($self) = @_;
+    return $self->search(
+        {
+            -and => [
+                { 'club_enrollments.club_id'       => { '!=' => undef } },
+                { 'club_enrollments.date_canceled' => undef },
+            ]
+        },
+        {
+            join     => 'club_enrollments',
+            distinct => 1,
+        }
+    );
 }
 
 =head3 type