my $all_perms = get_all_subpermissions();
my @flagroots = qw(circulate catalogue parameters borrowers permissions reserveforothers borrow
- editcatalogue updatecharges management tools editauthorities serials reports acquisition);
+ editcatalogue updatecharges management tools editauthorities serials reports acquisition clubs);
# We are going to use the $flags returned by checkauth
# to create the template's parameters that will indicate
$template->param( CAN_user_staffaccess => 1 );
$template->param( CAN_user_plugins => 1 );
$template->param( CAN_user_coursereserves => 1 );
- foreach my $module ( keys %$all_perms ) {
+ $template->param( CAN_user_clubs => 1 );
+ foreach my $module ( keys %$all_perms ) {
foreach my $subperm ( keys %{ $all_perms->{$module} } ) {
$template->param( "CAN_user_${module}_${subperm}" => 1 );
}
sub GetFirstValidEmailAddress {
my $borrowernumber = shift;
- my $dbh = C4::Context->dbh;
- my $sth = $dbh->prepare( "SELECT email, emailpro, B_email FROM borrowers where borrowernumber = ? ");
- $sth->execute( $borrowernumber );
- my $data = $sth->fetchrow_hashref;
- if ($data->{'email'}) {
- return $data->{'email'};
- } elsif ($data->{'emailpro'}) {
- return $data->{'emailpro'};
- } elsif ($data->{'B_email'}) {
- return $data->{'B_email'};
- } else {
- return '';
- }
+ my $borrower = Koha::Patrons->find( $borrowernumber );
+
+ return $borrower->first_valid_email_address();
}
=head2 GetNoticeEmailAddress
--- /dev/null
+package Koha::Club;
+
+# Copyright ByWater Solutions 2014
+#
+# 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 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.
+
+use Modern::Perl;
+
+use Carp;
+
+use Koha::Database;
+
+use Koha::Club::Templates;
+use Koha::Club::Fields;
+use Koha::Libraries;
+
+use base qw(Koha::Object);
+
+=head1 NAME
+
+Koha::Club - Koha Club Object class
+
+=head1 API
+
+=head2 Class Methods
+
+=cut
+
+=head3 club_template
+
+=cut
+
+sub club_template {
+ my ($self) = @_;
+
+ return unless $self->club_template_id();
+
+ return Koha::Club::Templates->find( $self->club_template_id() );
+}
+
+=head3 club_fields
+
+=cut
+
+sub club_fields {
+ my ($self) = @_;
+
+ return unless $self->id();
+
+ return Koha::Club::Fields->search( { club_id => $self->id() } );
+}
+
+=head3 club_fields
+
+=cut
+
+sub branch {
+ my ($self) = @_;
+
+ return unless $self->branchcode();
+
+ return Koha::Libraries->find( $self->branchcode() );
+}
+
+=head3 type
+
+=cut
+
+sub _type {
+ return 'Club';
+}
+
+=head1 AUTHOR
+
+Kyle M Hall <kyle@bywatersolutions.com>
+
+=cut
+
+1;
--- /dev/null
+package Koha::Club::Enrollment;
+
+# Copyright ByWater Solutions 2014
+#
+# 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 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.
+
+use Modern::Perl;
+
+use Carp;
+
+use Koha::Database;
+use Koha::Clubs;
+
+use base qw(Koha::Object);
+
+=head1 NAME
+
+Koha::Club::Enrollment
+
+Represents a "pattern" on which many clubs can be created.
+In this way we can directly compare different clubs of the same 'template'
+for statistical purposes.
+
+=head1 API
+
+=head2 Class Methods
+
+=cut
+
+=head3 cancel
+
+=cut
+
+sub cancel {
+ my ( $self ) = @_;
+
+ $self->_result()->update( { date_canceled => \'NOW()' } );
+
+ return $self;
+}
+
+=head3 club
+
+=cut
+
+sub club {
+ my ( $self ) = @_;
+ return Koha::Clubs->find( $self->club_id() );
+}
+
+=head3 type
+
+=cut
+
+sub _type {
+ return 'ClubEnrollment';
+}
+
+=head1 AUTHOR
+
+Kyle M Hall <kyle@bywatersolutions.com>
+
+=cut
+
+1;
--- /dev/null
+package Koha::Club::Enrollment::Field;
+
+# Copyright ByWater Solutions 2014
+#
+# 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 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.
+
+use Modern::Perl;
+
+use Carp;
+
+use Koha::Database;
+
+use base qw(Koha::Object);
+
+=head1 NAME
+
+Koha::Club::Enrollment::Field
+
+Represents a "pattern" on which many clubs can be created.
+In this way we can directly compare different clubs of the same 'template'
+for statistical purposes.
+
+=head1 API
+
+=head2 Class Methods
+
+=cut
+
+=head3 type
+
+=cut
+
+sub _type {
+ return 'ClubEnrollmentField';
+}
+
+=head1 AUTHOR
+
+Kyle M Hall <kyle@bywatersolutions.com>
+
+=cut
+
+1;
--- /dev/null
+package Koha::Club::Enrollment::Fields;
+
+# Copyright ByWater Solutions 2014
+#
+# 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 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.
+
+use Modern::Perl;
+
+use Carp;
+
+use Koha::Database;
+
+use Koha::Club::Enrollment::Field;
+
+use base qw(Koha::Objects);
+
+=head1 NAME
+
+Koha::Club::Enrollment::Fields
+
+This object represents a collection of club enrollemnt fields.
+
+=head1 API
+
+=head2 Class Methods
+
+=cut
+
+=head3 type
+
+=cut
+
+sub _type {
+ return 'ClubEnrollmentField';
+}
+
+sub object_class {
+ return 'Koha::Club::Enrollment::Field';
+}
+
+=head1 AUTHOR
+
+Kyle M Hall <kyle@bywatersolutions.com>
+
+=cut
+
+1;
--- /dev/null
+package Koha::Club::Enrollments;
+
+# Copyright ByWater Solutions 2014
+#
+# 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 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.
+
+use Modern::Perl;
+
+use Carp;
+
+use Koha::Database;
+
+use Koha::Club::Enrollment;
+
+use base qw(Koha::Objects);
+
+=head1 NAME
+
+Koha::Club::Enrollments
+
+This object represents a collection of club templates.
+
+=head1 API
+
+=head2 Class Methods
+
+=cut
+
+=head3 type
+
+=cut
+
+sub _type {
+ return 'ClubEnrollment';
+}
+
+sub object_class {
+ return 'Koha::Club::Enrollment';
+}
+
+=head1 AUTHOR
+
+Kyle M Hall <kyle@bywatersolutions.com>
+
+=cut
+
+1;
--- /dev/null
+package Koha::Club::Field;
+
+# Copyright ByWater Solutions 2014
+#
+# 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 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.
+
+use Modern::Perl;
+
+use Carp;
+
+use Koha::Database;
+
+use Koha::Club::Template::Fields;
+
+use base qw(Koha::Object);
+
+=head1 NAME
+
+Koha::Club::Field
+
+Represents the value set at creation time for a Koha::Club::Template::Field
+
+=head1 API
+
+=head2 Class Methods
+
+=cut
+
+=head3 club_template_field
+
+=cut
+
+sub club_template_field {
+ my ( $self ) = @_;
+
+ return Koha::Club::Template::Fields->find( $self->club_template_field_id );
+}
+
+=head3 type
+
+=cut
+
+sub _type {
+ return 'ClubField';
+}
+
+=head1 AUTHOR
+
+Kyle M Hall <kyle@bywatersolutions.com>
+
+=cut
+
+1;
--- /dev/null
+package Koha::Club::Fields;
+
+# Copyright ByWater Solutions 2014
+#
+# 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 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.
+
+use Modern::Perl;
+
+use Carp;
+
+use Koha::Database;
+
+use Koha::Club::Field;
+
+use base qw(Koha::Objects);
+
+=head1 NAME
+
+Koha::Club::Fields
+
+Represents a collection of club fields.
+
+=head1 API
+
+=head2 Class Methods
+
+=cut
+
+=head3 type
+
+=cut
+
+sub _type {
+ return 'ClubField';
+}
+
+sub object_class {
+ return 'Koha::Club::Field';
+}
+
+=head1 AUTHOR
+
+Kyle M Hall <kyle@bywatersolutions.com>
+
+=cut
+
+1;
--- /dev/null
+package Koha::Club::Template;
+
+# Copyright ByWater Solutions 2014
+#
+# 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 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.
+
+use Modern::Perl;
+
+use Carp;
+
+use Koha::Database;
+
+use Koha::Club::Template::Fields;
+use Koha::Club::Template::EnrollmentFields;
+
+use base qw(Koha::Object);
+
+=head1 NAME
+
+Koha::Club::Template
+
+Represents a "pattern" on which many clubs can be created.
+In this way we can directly compare different clubs of the same 'template'
+for statistical purposes.
+
+=head1 API
+
+=head2 Class Methods
+
+=cut
+
+=head3 club_template_fields
+
+=cut
+
+sub club_template_fields {
+ my ($self) = @_;
+
+ return Koha::Club::Template::Fields->search( { club_template_id => $self->id() } );
+}
+
+sub club_template_enrollment_fields {
+ my ($self) = @_;
+
+ return Koha::Club::Template::EnrollmentFields->search( { club_template_id => $self->id() } );
+}
+
+=head3 type
+
+=cut
+
+sub _type {
+ return 'ClubTemplate';
+}
+
+=head1 AUTHOR
+
+Kyle M Hall <kyle@bywatersolutions.com>
+
+=cut
+
+1;
--- /dev/null
+package Koha::Club::Template::EnrollmentField;
+
+# Copyright ByWater Solutions 2014
+#
+# 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 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.
+
+use Modern::Perl;
+
+use Carp;
+
+use Koha::Database;
+
+use base qw(Koha::Object);
+
+=head1 NAME
+
+Koha::Club::Template::EnrollemntField
+
+Represents a club field that is only set at the time a patron is enrolled
+
+=head1 API
+
+=head2 Class Methods
+
+=cut
+
+=head3 type
+
+=cut
+
+sub _type {
+ return 'ClubTemplateEnrollmentField';
+}
+
+=head1 AUTHOR
+
+Kyle M Hall <kyle@bywatersolutions.com>
+
+=cut
+
+1;
--- /dev/null
+package Koha::Club::Template::EnrollmentFields;
+
+# Copyright ByWater Solutions 2014
+#
+# 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 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.
+
+use Modern::Perl;
+
+use Carp;
+
+use Koha::Database;
+
+use Koha::Club::Template::EnrollmentField;
+
+use base qw(Koha::Objects);
+
+=head1 NAME
+
+Koha::Club::Template::EnrollemntFields
+
+Represents a colleciton of club fields that are only set at the time a patron is enrolled
+
+=head1 API
+
+=head2 Class Methods
+
+=cut
+
+=head3 type
+
+=cut
+
+sub _type {
+ return 'ClubTemplateEnrollmentField';
+}
+
+sub object_class {
+ return 'Koha::Club::Template::EnrollmentField';
+}
+
+=head1 AUTHOR
+
+Kyle M Hall <kyle@bywatersolutions.com>
+
+=cut
+
+1;
--- /dev/null
+package Koha::Club::Template::Field;
+
+# Copyright ByWater Solutions 2014
+#
+# 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 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.
+
+use Modern::Perl;
+
+use Carp;
+
+use Koha::Database;
+
+use base qw(Koha::Object);
+
+=head1 NAME
+
+Koha::Club::Template::Field
+
+Represents a club field that is set when the club is created
+
+=head1 API
+
+=head2 Class Methods
+
+=cut
+
+=head3 type
+
+=cut
+
+sub _type {
+ return 'ClubTemplateField';
+}
+
+=head1 AUTHOR
+
+Kyle M Hall <kyle@bywatersolutions.com>
+
+=cut
+
+1;
--- /dev/null
+package Koha::Club::Template::Fields;
+
+# Copyright ByWater Solutions 2014
+#
+# 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 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.
+
+use Modern::Perl;
+
+use Carp;
+
+use Koha::Database;
+
+use Koha::Club::Template::Field;
+
+use base qw(Koha::Objects);
+
+=head1 NAME
+
+Koha::Club::Template::Fields
+
+Represents a collection of club fields that are set when the club is created
+
+=head1 API
+
+=head2 Class Methods
+
+=cut
+
+=head3 type
+
+=cut
+
+sub _type {
+ return 'ClubTemplateField';
+}
+
+sub object_class {
+ return 'Koha::Club::Template::Field';
+}
+
+=head1 AUTHOR
+
+Kyle M Hall <kyle@bywatersolutions.com>
+
+=cut
+
+1;
--- /dev/null
+package Koha::Club::Templates;
+
+# Copyright ByWater Solutions 2014
+#
+# 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 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.
+
+use Modern::Perl;
+
+use Carp;
+
+use Koha::Database;
+
+use Koha::Club::Template;
+
+use base qw(Koha::Objects);
+
+=head1 NAME
+
+Koha::Club::Templates
+
+This object represents a collection of club templates.
+
+=head1 API
+
+=head2 Class Methods
+
+=cut
+
+=head3 type
+
+=cut
+
+sub _type {
+ return 'ClubTemplate';
+}
+
+sub object_class {
+ return 'Koha::Club::Template';
+}
+
+=head1 AUTHOR
+
+Kyle M Hall <kyle@bywatersolutions.com>
+
+=cut
+
+1;
--- /dev/null
+package Koha::Clubs;
+
+# Copyright ByWater Solutions 2014
+#
+# 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 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.
+
+use Modern::Perl;
+
+use Carp;
+
+use Koha::Database;
+
+use Koha::Club;
+
+use base qw(Koha::Objects);
+
+=head1 NAME
+
+Koha::Clubs - Koha Clubs Object class
+
+This object represents a collection of clubs a patron may enroll in.
+
+=head1 API
+
+=head2 Class Methods
+
+=cut
+
+=head3 get_enrollable
+
+=cut
+
+sub get_enrollable {
+ my ( $self, $params ) = @_;
+
+ # We need to filter out all the already enrolled in clubs
+ my $borrower = $params->{borrower};
+ if ($borrower) {
+ delete( $params->{borrower} );
+ my @enrollments = $borrower->get_club_enrollments();
+ if (@enrollments) {
+ $params->{'me.id'} = { -not_in => [ map { $_->club()->id() } @enrollments ] };
+ }
+ }
+
+ my $rs = $self->_resultset()->search( $params, { prefetch => 'club_template' } );
+
+ if (wantarray) {
+ my $class = ref($self) ? ref($self) : $self;
+
+ return $class->_wrap( $rs->all() );
+
+ }
+ else {
+ my $class = ref($self) ? ref($self) : $self;
+
+ return $class->_new_from_dbic($rs);
+ }
+}
+
+=head3 type
+
+=cut
+
+sub _type {
+ return 'Club';
+}
+
+sub object_class {
+ return 'Koha::Club';
+}
+
+=head1 AUTHOR
+
+Kyle M Hall <kyle@bywatersolutions.com>
+
+=cut
+
+1;
use Koha::Patron::Images;
use Koha::Patrons;
use Koha::Virtualshelves;
+use Koha::Club::Enrollments;
use base qw(Koha::Object);
return Koha::Holds->_new_from_dbic($holds_rs);
}
+=head3 first_valid_email_address
+
+=cut
+
+sub first_valid_email_address {
+ my ($self) = @_;
+
+ return $self->email() || $self->emailpro() || $self->B_email() || q{};
+}
+
+=head3 get_club_enrollments
+
+=cut
+
+sub get_club_enrollments {
+ my ($self) = @_;
+
+ return Koha::Club::Enrollments->search( { borrowernumber => $self->borrowernumber(), date_canceled => undef } );
+}
+
+=head3 get_enrollable_clubs
+
+=cut
+
+sub get_enrollable_clubs {
+ my ( $self, $is_enrollable_from_opac ) = @_;
+
+ my $params;
+ $params->{is_enrollable_from_opac} = $is_enrollable_from_opac
+ if $is_enrollable_from_opac;
+ $params->{is_email_required} = 0 unless $self->first_valid_email_address();
+
+ $params->{borrower} = $self;
+
+ return Koha::Clubs->get_enrollable($params);
+}
+
=head3 type
=cut
);
-# Created by DBIx::Class::Schema::Loader v0.07045 @ 2016-08-30 11:52:45
-# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:LOArv8JQ0aiTZgcy+jb7pA
+# Created by DBIx::Class::Schema::Loader v0.07040 @ 2015-01-12 09:54:50
+# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:IzI/WpMbwvfZ8BpHtRCsiQ
# You can replace this text with custom content, and it will be preserved on regeneration
{ is_deferrable => 1, on_delete => "RESTRICT", on_update => "RESTRICT" },
);
+=head2 club_enrollments
+
+Type: has_many
+
+Related object: L<Koha::Schema::Result::ClubEnrollment>
+
+=cut
+
+__PACKAGE__->has_many(
+ "club_enrollments",
+ "Koha::Schema::Result::ClubEnrollment",
+ { "foreign.borrowernumber" => "self.borrowernumber" },
+ { cascade_copy => 0, cascade_delete => 0 },
+);
+
=head2 course_instructors
Type: has_many
{ cascade_copy => 0, cascade_delete => 0 },
);
+=head2 club_enrollments
+
+Type: has_many
+
+Related object: L<Koha::Schema::Result::ClubEnrollment>
+
+=cut
+
+__PACKAGE__->has_many(
+ "club_enrollments",
+ "Koha::Schema::Result::ClubEnrollment",
+ { "foreign.branchcode" => "self.branchcode" },
+ { cascade_copy => 0, cascade_delete => 0 },
+);
+
+=head2 club_templates
+
+Type: has_many
+
+Related object: L<Koha::Schema::Result::ClubTemplate>
+
+=cut
+
+__PACKAGE__->has_many(
+ "club_templates",
+ "Koha::Schema::Result::ClubTemplate",
+ { "foreign.branchcode" => "self.branchcode" },
+ { cascade_copy => 0, cascade_delete => 0 },
+);
+
+=head2 clubs
+
+Type: has_many
+
+Related object: L<Koha::Schema::Result::Club>
+
+=cut
+
+__PACKAGE__->has_many(
+ "clubs",
+ "Koha::Schema::Result::Club",
+ { "foreign.branchcode" => "self.branchcode" },
+ { cascade_copy => 0, cascade_delete => 0 },
+);
+
=head2 collections
Type: has_many
__PACKAGE__->many_to_many("categorycodes", "branchrelations", "categorycode");
-# Created by DBIx::Class::Schema::Loader v0.07042 @ 2016-10-24 13:56:21
-# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:/9YwsU+GXK+fzc6IX2Tj5g
+# Created by DBIx::Class::Schema::Loader v0.07040 @ 2015-01-12 09:56:17
+# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:lvjA8x8u5RKeZQ0+uiLm7A
# You can replace this text with custom code or comments, and it will be preserved on regeneration
--- /dev/null
+use utf8;
+package Koha::Schema::Result::Club;
+
+# Created by DBIx::Class::Schema::Loader
+# DO NOT MODIFY THE FIRST PART OF THIS FILE
+
+=head1 NAME
+
+Koha::Schema::Result::Club
+
+=cut
+
+use strict;
+use warnings;
+
+use base 'DBIx::Class::Core';
+
+=head1 TABLE: C<clubs>
+
+=cut
+
+__PACKAGE__->table("clubs");
+
+=head1 ACCESSORS
+
+=head2 id
+
+ data_type: 'integer'
+ is_auto_increment: 1
+ is_nullable: 0
+
+=head2 club_template_id
+
+ data_type: 'integer'
+ is_foreign_key: 1
+ is_nullable: 0
+
+=head2 name
+
+ data_type: 'tinytext'
+ is_nullable: 0
+
+=head2 description
+
+ data_type: 'text'
+ is_nullable: 1
+
+=head2 date_start
+
+ data_type: 'date'
+ datetime_undef_if_invalid: 1
+ is_nullable: 1
+
+=head2 date_end
+
+ data_type: 'date'
+ datetime_undef_if_invalid: 1
+ is_nullable: 1
+
+=head2 branchcode
+
+ data_type: 'varchar'
+ is_foreign_key: 1
+ is_nullable: 1
+ size: 11
+
+=head2 date_created
+
+ data_type: 'timestamp'
+ datetime_undef_if_invalid: 1
+ default_value: current_timestamp
+ is_nullable: 0
+
+=head2 date_updated
+
+ data_type: 'timestamp'
+ datetime_undef_if_invalid: 1
+ is_nullable: 1
+
+=cut
+
+__PACKAGE__->add_columns(
+ "id",
+ { data_type => "integer", is_auto_increment => 1, is_nullable => 0 },
+ "club_template_id",
+ { data_type => "integer", is_foreign_key => 1, is_nullable => 0 },
+ "name",
+ { data_type => "tinytext", is_nullable => 0 },
+ "description",
+ { data_type => "text", is_nullable => 1 },
+ "date_start",
+ { data_type => "date", datetime_undef_if_invalid => 1, is_nullable => 1 },
+ "date_end",
+ { data_type => "date", datetime_undef_if_invalid => 1, is_nullable => 1 },
+ "branchcode",
+ { data_type => "varchar", is_foreign_key => 1, is_nullable => 1, size => 11 },
+ "date_created",
+ {
+ data_type => "timestamp",
+ datetime_undef_if_invalid => 1,
+ default_value => \"current_timestamp",
+ is_nullable => 0,
+ },
+ "date_updated",
+ {
+ data_type => "timestamp",
+ datetime_undef_if_invalid => 1,
+ is_nullable => 1,
+ },
+);
+
+=head1 PRIMARY KEY
+
+=over 4
+
+=item * L</id>
+
+=back
+
+=cut
+
+__PACKAGE__->set_primary_key("id");
+
+=head1 RELATIONS
+
+=head2 branchcode
+
+Type: belongs_to
+
+Related object: L<Koha::Schema::Result::Branch>
+
+=cut
+
+__PACKAGE__->belongs_to(
+ "branchcode",
+ "Koha::Schema::Result::Branch",
+ { branchcode => "branchcode" },
+ {
+ is_deferrable => 1,
+ join_type => "LEFT",
+ on_delete => "RESTRICT",
+ on_update => "RESTRICT",
+ },
+);
+
+=head2 club_enrollments
+
+Type: has_many
+
+Related object: L<Koha::Schema::Result::ClubEnrollment>
+
+=cut
+
+__PACKAGE__->has_many(
+ "club_enrollments",
+ "Koha::Schema::Result::ClubEnrollment",
+ { "foreign.club_id" => "self.id" },
+ { cascade_copy => 0, cascade_delete => 0 },
+);
+
+=head2 club_fields
+
+Type: has_many
+
+Related object: L<Koha::Schema::Result::ClubField>
+
+=cut
+
+__PACKAGE__->has_many(
+ "club_fields",
+ "Koha::Schema::Result::ClubField",
+ { "foreign.club_id" => "self.id" },
+ { cascade_copy => 0, cascade_delete => 0 },
+);
+
+=head2 club_template
+
+Type: belongs_to
+
+Related object: L<Koha::Schema::Result::ClubTemplate>
+
+=cut
+
+__PACKAGE__->belongs_to(
+ "club_template",
+ "Koha::Schema::Result::ClubTemplate",
+ { id => "club_template_id" },
+ { is_deferrable => 1, on_delete => "CASCADE", on_update => "CASCADE" },
+);
+
+
+# Created by DBIx::Class::Schema::Loader v0.07040 @ 2015-01-12 09:56:17
+# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:nMwJy/qR8aWu12hQq4rORQ
+
+
+# You can replace this text with custom content, and it will be preserved on regeneration
+1;
--- /dev/null
+use utf8;
+package Koha::Schema::Result::ClubEnrollment;
+
+# Created by DBIx::Class::Schema::Loader
+# DO NOT MODIFY THE FIRST PART OF THIS FILE
+
+=head1 NAME
+
+Koha::Schema::Result::ClubEnrollment
+
+=cut
+
+use strict;
+use warnings;
+
+use base 'DBIx::Class::Core';
+
+=head1 TABLE: C<club_enrollments>
+
+=cut
+
+__PACKAGE__->table("club_enrollments");
+
+=head1 ACCESSORS
+
+=head2 id
+
+ data_type: 'integer'
+ is_auto_increment: 1
+ is_nullable: 0
+
+=head2 club_id
+
+ data_type: 'integer'
+ is_foreign_key: 1
+ is_nullable: 0
+
+=head2 borrowernumber
+
+ data_type: 'integer'
+ is_foreign_key: 1
+ is_nullable: 0
+
+=head2 date_enrolled
+
+ data_type: 'timestamp'
+ datetime_undef_if_invalid: 1
+ default_value: current_timestamp
+ is_nullable: 0
+
+=head2 date_canceled
+
+ data_type: 'timestamp'
+ datetime_undef_if_invalid: 1
+ is_nullable: 1
+
+=head2 date_created
+
+ data_type: 'timestamp'
+ datetime_undef_if_invalid: 1
+ default_value: '0000-00-00 00:00:00'
+ is_nullable: 0
+
+=head2 date_updated
+
+ data_type: 'timestamp'
+ datetime_undef_if_invalid: 1
+ is_nullable: 1
+
+=head2 branchcode
+
+ data_type: 'varchar'
+ is_foreign_key: 1
+ is_nullable: 1
+ size: 11
+
+=cut
+
+__PACKAGE__->add_columns(
+ "id",
+ { data_type => "integer", is_auto_increment => 1, is_nullable => 0 },
+ "club_id",
+ { data_type => "integer", is_foreign_key => 1, is_nullable => 0 },
+ "borrowernumber",
+ { data_type => "integer", is_foreign_key => 1, is_nullable => 0 },
+ "date_enrolled",
+ {
+ data_type => "timestamp",
+ datetime_undef_if_invalid => 1,
+ default_value => \"current_timestamp",
+ is_nullable => 0,
+ },
+ "date_canceled",
+ {
+ data_type => "timestamp",
+ datetime_undef_if_invalid => 1,
+ is_nullable => 1,
+ },
+ "date_created",
+ {
+ data_type => "timestamp",
+ datetime_undef_if_invalid => 1,
+ default_value => "0000-00-00 00:00:00",
+ is_nullable => 0,
+ },
+ "date_updated",
+ {
+ data_type => "timestamp",
+ datetime_undef_if_invalid => 1,
+ is_nullable => 1,
+ },
+ "branchcode",
+ { data_type => "varchar", is_foreign_key => 1, is_nullable => 1, size => 11 },
+);
+
+=head1 PRIMARY KEY
+
+=over 4
+
+=item * L</id>
+
+=back
+
+=cut
+
+__PACKAGE__->set_primary_key("id");
+
+=head1 RELATIONS
+
+=head2 borrowernumber
+
+Type: belongs_to
+
+Related object: L<Koha::Schema::Result::Borrower>
+
+=cut
+
+__PACKAGE__->belongs_to(
+ "borrowernumber",
+ "Koha::Schema::Result::Borrower",
+ { borrowernumber => "borrowernumber" },
+ { is_deferrable => 1, on_delete => "CASCADE", on_update => "CASCADE" },
+);
+
+=head2 branchcode
+
+Type: belongs_to
+
+Related object: L<Koha::Schema::Result::Branch>
+
+=cut
+
+__PACKAGE__->belongs_to(
+ "branchcode",
+ "Koha::Schema::Result::Branch",
+ { branchcode => "branchcode" },
+ {
+ is_deferrable => 1,
+ join_type => "LEFT",
+ on_delete => "SET NULL",
+ on_update => "CASCADE",
+ },
+);
+
+=head2 club
+
+Type: belongs_to
+
+Related object: L<Koha::Schema::Result::Club>
+
+=cut
+
+__PACKAGE__->belongs_to(
+ "club",
+ "Koha::Schema::Result::Club",
+ { id => "club_id" },
+ { is_deferrable => 1, on_delete => "CASCADE", on_update => "CASCADE" },
+);
+
+=head2 club_enrollment_fields
+
+Type: has_many
+
+Related object: L<Koha::Schema::Result::ClubEnrollmentField>
+
+=cut
+
+__PACKAGE__->has_many(
+ "club_enrollment_fields",
+ "Koha::Schema::Result::ClubEnrollmentField",
+ { "foreign.club_enrollment_id" => "self.id" },
+ { cascade_copy => 0, cascade_delete => 0 },
+);
+
+
+# Created by DBIx::Class::Schema::Loader v0.07040 @ 2015-01-12 09:56:17
+# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:9ypc+smG/VlgtWW66PhvHQ
+
+
+# You can replace this text with custom content, and it will be preserved on regeneration
+1;
--- /dev/null
+use utf8;
+package Koha::Schema::Result::ClubEnrollmentField;
+
+# Created by DBIx::Class::Schema::Loader
+# DO NOT MODIFY THE FIRST PART OF THIS FILE
+
+=head1 NAME
+
+Koha::Schema::Result::ClubEnrollmentField
+
+=cut
+
+use strict;
+use warnings;
+
+use base 'DBIx::Class::Core';
+
+=head1 TABLE: C<club_enrollment_fields>
+
+=cut
+
+__PACKAGE__->table("club_enrollment_fields");
+
+=head1 ACCESSORS
+
+=head2 id
+
+ data_type: 'integer'
+ is_auto_increment: 1
+ is_nullable: 0
+
+=head2 club_enrollment_id
+
+ data_type: 'integer'
+ is_foreign_key: 1
+ is_nullable: 0
+
+=head2 club_template_enrollment_field_id
+
+ data_type: 'integer'
+ is_foreign_key: 1
+ is_nullable: 0
+
+=head2 value
+
+ data_type: 'text'
+ is_nullable: 0
+
+=cut
+
+__PACKAGE__->add_columns(
+ "id",
+ { data_type => "integer", is_auto_increment => 1, is_nullable => 0 },
+ "club_enrollment_id",
+ { data_type => "integer", is_foreign_key => 1, is_nullable => 0 },
+ "club_template_enrollment_field_id",
+ { data_type => "integer", is_foreign_key => 1, is_nullable => 0 },
+ "value",
+ { data_type => "text", is_nullable => 0 },
+);
+
+=head1 PRIMARY KEY
+
+=over 4
+
+=item * L</id>
+
+=back
+
+=cut
+
+__PACKAGE__->set_primary_key("id");
+
+=head1 RELATIONS
+
+=head2 club_enrollment
+
+Type: belongs_to
+
+Related object: L<Koha::Schema::Result::ClubEnrollment>
+
+=cut
+
+__PACKAGE__->belongs_to(
+ "club_enrollment",
+ "Koha::Schema::Result::ClubEnrollment",
+ { id => "club_enrollment_id" },
+ { is_deferrable => 1, on_delete => "CASCADE", on_update => "CASCADE" },
+);
+
+=head2 club_template_enrollment_field
+
+Type: belongs_to
+
+Related object: L<Koha::Schema::Result::ClubTemplateEnrollmentField>
+
+=cut
+
+__PACKAGE__->belongs_to(
+ "club_template_enrollment_field",
+ "Koha::Schema::Result::ClubTemplateEnrollmentField",
+ { id => "club_template_enrollment_field_id" },
+ { is_deferrable => 1, on_delete => "CASCADE", on_update => "CASCADE" },
+);
+
+
+# Created by DBIx::Class::Schema::Loader v0.07040 @ 2015-01-12 09:56:17
+# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:2ANAs3mh3i/kd3Qxrcd5IA
+
+
+# You can replace this text with custom content, and it will be preserved on regeneration
+1;
--- /dev/null
+use utf8;
+package Koha::Schema::Result::ClubField;
+
+# Created by DBIx::Class::Schema::Loader
+# DO NOT MODIFY THE FIRST PART OF THIS FILE
+
+=head1 NAME
+
+Koha::Schema::Result::ClubField
+
+=cut
+
+use strict;
+use warnings;
+
+use base 'DBIx::Class::Core';
+
+=head1 TABLE: C<club_fields>
+
+=cut
+
+__PACKAGE__->table("club_fields");
+
+=head1 ACCESSORS
+
+=head2 id
+
+ data_type: 'integer'
+ is_auto_increment: 1
+ is_nullable: 0
+
+=head2 club_template_field_id
+
+ data_type: 'integer'
+ is_foreign_key: 1
+ is_nullable: 0
+
+=head2 club_id
+
+ data_type: 'integer'
+ is_foreign_key: 1
+ is_nullable: 0
+
+=head2 value
+
+ data_type: 'text'
+ is_nullable: 1
+
+=cut
+
+__PACKAGE__->add_columns(
+ "id",
+ { data_type => "integer", is_auto_increment => 1, is_nullable => 0 },
+ "club_template_field_id",
+ { data_type => "integer", is_foreign_key => 1, is_nullable => 0 },
+ "club_id",
+ { data_type => "integer", is_foreign_key => 1, is_nullable => 0 },
+ "value",
+ { data_type => "text", is_nullable => 1 },
+);
+
+=head1 PRIMARY KEY
+
+=over 4
+
+=item * L</id>
+
+=back
+
+=cut
+
+__PACKAGE__->set_primary_key("id");
+
+=head1 RELATIONS
+
+=head2 club
+
+Type: belongs_to
+
+Related object: L<Koha::Schema::Result::Club>
+
+=cut
+
+__PACKAGE__->belongs_to(
+ "club",
+ "Koha::Schema::Result::Club",
+ { id => "club_id" },
+ { is_deferrable => 1, on_delete => "CASCADE", on_update => "CASCADE" },
+);
+
+=head2 club_template_field
+
+Type: belongs_to
+
+Related object: L<Koha::Schema::Result::ClubTemplateField>
+
+=cut
+
+__PACKAGE__->belongs_to(
+ "club_template_field",
+ "Koha::Schema::Result::ClubTemplateField",
+ { id => "club_template_field_id" },
+ { is_deferrable => 1, on_delete => "CASCADE", on_update => "CASCADE" },
+);
+
+
+# Created by DBIx::Class::Schema::Loader v0.07040 @ 2015-01-12 09:56:17
+# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:m4GLLIVIHgRpRhCGLh12DQ
+
+
+# You can replace this text with custom content, and it will be preserved on regeneration
+1;
--- /dev/null
+use utf8;
+package Koha::Schema::Result::ClubTemplate;
+
+# Created by DBIx::Class::Schema::Loader
+# DO NOT MODIFY THE FIRST PART OF THIS FILE
+
+=head1 NAME
+
+Koha::Schema::Result::ClubTemplate
+
+=cut
+
+use strict;
+use warnings;
+
+use base 'DBIx::Class::Core';
+
+=head1 TABLE: C<club_templates>
+
+=cut
+
+__PACKAGE__->table("club_templates");
+
+=head1 ACCESSORS
+
+=head2 id
+
+ data_type: 'integer'
+ is_auto_increment: 1
+ is_nullable: 0
+
+=head2 name
+
+ data_type: 'tinytext'
+ is_nullable: 0
+
+=head2 description
+
+ data_type: 'text'
+ is_nullable: 1
+
+=head2 is_enrollable_from_opac
+
+ data_type: 'tinyint'
+ default_value: 0
+ is_nullable: 0
+
+=head2 is_email_required
+
+ data_type: 'tinyint'
+ default_value: 0
+ is_nullable: 0
+
+=head2 branchcode
+
+ data_type: 'varchar'
+ is_foreign_key: 1
+ is_nullable: 1
+ size: 10
+
+=head2 date_created
+
+ data_type: 'timestamp'
+ datetime_undef_if_invalid: 1
+ default_value: current_timestamp
+ is_nullable: 0
+
+=head2 date_updated
+
+ data_type: 'timestamp'
+ datetime_undef_if_invalid: 1
+ is_nullable: 1
+
+=head2 is_deletable
+
+ data_type: 'tinyint'
+ default_value: 1
+ is_nullable: 0
+
+=cut
+
+__PACKAGE__->add_columns(
+ "id",
+ { data_type => "integer", is_auto_increment => 1, is_nullable => 0 },
+ "name",
+ { data_type => "tinytext", is_nullable => 0 },
+ "description",
+ { data_type => "text", is_nullable => 1 },
+ "is_enrollable_from_opac",
+ { data_type => "tinyint", default_value => 0, is_nullable => 0 },
+ "is_email_required",
+ { data_type => "tinyint", default_value => 0, is_nullable => 0 },
+ "branchcode",
+ { data_type => "varchar", is_foreign_key => 1, is_nullable => 1, size => 10 },
+ "date_created",
+ {
+ data_type => "timestamp",
+ datetime_undef_if_invalid => 1,
+ default_value => \"current_timestamp",
+ is_nullable => 0,
+ },
+ "date_updated",
+ {
+ data_type => "timestamp",
+ datetime_undef_if_invalid => 1,
+ is_nullable => 1,
+ },
+ "is_deletable",
+ { data_type => "tinyint", default_value => 1, is_nullable => 0 },
+);
+
+=head1 PRIMARY KEY
+
+=over 4
+
+=item * L</id>
+
+=back
+
+=cut
+
+__PACKAGE__->set_primary_key("id");
+
+=head1 RELATIONS
+
+=head2 branchcode
+
+Type: belongs_to
+
+Related object: L<Koha::Schema::Result::Branch>
+
+=cut
+
+__PACKAGE__->belongs_to(
+ "branchcode",
+ "Koha::Schema::Result::Branch",
+ { branchcode => "branchcode" },
+ {
+ is_deferrable => 1,
+ join_type => "LEFT",
+ on_delete => "SET NULL",
+ on_update => "CASCADE",
+ },
+);
+
+=head2 club_template_enrollment_fields
+
+Type: has_many
+
+Related object: L<Koha::Schema::Result::ClubTemplateEnrollmentField>
+
+=cut
+
+__PACKAGE__->has_many(
+ "club_template_enrollment_fields",
+ "Koha::Schema::Result::ClubTemplateEnrollmentField",
+ { "foreign.club_template_id" => "self.id" },
+ { cascade_copy => 0, cascade_delete => 0 },
+);
+
+=head2 club_template_fields
+
+Type: has_many
+
+Related object: L<Koha::Schema::Result::ClubTemplateField>
+
+=cut
+
+__PACKAGE__->has_many(
+ "club_template_fields",
+ "Koha::Schema::Result::ClubTemplateField",
+ { "foreign.club_template_id" => "self.id" },
+ { cascade_copy => 0, cascade_delete => 0 },
+);
+
+=head2 clubs
+
+Type: has_many
+
+Related object: L<Koha::Schema::Result::Club>
+
+=cut
+
+__PACKAGE__->has_many(
+ "clubs",
+ "Koha::Schema::Result::Club",
+ { "foreign.club_template_id" => "self.id" },
+ { cascade_copy => 0, cascade_delete => 0 },
+);
+
+
+# Created by DBIx::Class::Schema::Loader v0.07040 @ 2015-01-12 09:56:17
+# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:j5aiACVUGzrdng4+jt6mfg
+
+1;
--- /dev/null
+use utf8;
+package Koha::Schema::Result::ClubTemplateEnrollmentField;
+
+# Created by DBIx::Class::Schema::Loader
+# DO NOT MODIFY THE FIRST PART OF THIS FILE
+
+=head1 NAME
+
+Koha::Schema::Result::ClubTemplateEnrollmentField
+
+=cut
+
+use strict;
+use warnings;
+
+use base 'DBIx::Class::Core';
+
+=head1 TABLE: C<club_template_enrollment_fields>
+
+=cut
+
+__PACKAGE__->table("club_template_enrollment_fields");
+
+=head1 ACCESSORS
+
+=head2 id
+
+ data_type: 'integer'
+ is_auto_increment: 1
+ is_nullable: 0
+
+=head2 club_template_id
+
+ data_type: 'integer'
+ is_foreign_key: 1
+ is_nullable: 0
+
+=head2 name
+
+ data_type: 'tinytext'
+ is_nullable: 0
+
+=head2 description
+
+ data_type: 'text'
+ is_nullable: 1
+
+=head2 authorised_value_category
+
+ data_type: 'varchar'
+ is_nullable: 1
+ size: 16
+
+=cut
+
+__PACKAGE__->add_columns(
+ "id",
+ { data_type => "integer", is_auto_increment => 1, is_nullable => 0 },
+ "club_template_id",
+ { data_type => "integer", is_foreign_key => 1, is_nullable => 0 },
+ "name",
+ { data_type => "tinytext", is_nullable => 0 },
+ "description",
+ { data_type => "text", is_nullable => 1 },
+ "authorised_value_category",
+ { data_type => "varchar", is_nullable => 1, size => 16 },
+);
+
+=head1 PRIMARY KEY
+
+=over 4
+
+=item * L</id>
+
+=back
+
+=cut
+
+__PACKAGE__->set_primary_key("id");
+
+=head1 RELATIONS
+
+=head2 club_enrollment_fields
+
+Type: has_many
+
+Related object: L<Koha::Schema::Result::ClubEnrollmentField>
+
+=cut
+
+__PACKAGE__->has_many(
+ "club_enrollment_fields",
+ "Koha::Schema::Result::ClubEnrollmentField",
+ { "foreign.club_template_enrollment_field_id" => "self.id" },
+ { cascade_copy => 0, cascade_delete => 0 },
+);
+
+=head2 club_template
+
+Type: belongs_to
+
+Related object: L<Koha::Schema::Result::ClubTemplate>
+
+=cut
+
+__PACKAGE__->belongs_to(
+ "club_template",
+ "Koha::Schema::Result::ClubTemplate",
+ { id => "club_template_id" },
+ { is_deferrable => 1, on_delete => "CASCADE", on_update => "CASCADE" },
+);
+
+
+# Created by DBIx::Class::Schema::Loader v0.07040 @ 2015-01-12 09:56:17
+# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:KGo2mEIAkTVYSPsOLoaBCg
+
+
+# You can replace this text with custom content, and it will be preserved on regeneration
+1;
--- /dev/null
+use utf8;
+package Koha::Schema::Result::ClubTemplateField;
+
+# Created by DBIx::Class::Schema::Loader
+# DO NOT MODIFY THE FIRST PART OF THIS FILE
+
+=head1 NAME
+
+Koha::Schema::Result::ClubTemplateField
+
+=cut
+
+use strict;
+use warnings;
+
+use base 'DBIx::Class::Core';
+
+=head1 TABLE: C<club_template_fields>
+
+=cut
+
+__PACKAGE__->table("club_template_fields");
+
+=head1 ACCESSORS
+
+=head2 id
+
+ data_type: 'integer'
+ is_auto_increment: 1
+ is_nullable: 0
+
+=head2 club_template_id
+
+ data_type: 'integer'
+ is_foreign_key: 1
+ is_nullable: 0
+
+=head2 name
+
+ data_type: 'tinytext'
+ is_nullable: 0
+
+=head2 description
+
+ data_type: 'text'
+ is_nullable: 1
+
+=head2 authorised_value_category
+
+ data_type: 'varchar'
+ is_nullable: 1
+ size: 16
+
+=cut
+
+__PACKAGE__->add_columns(
+ "id",
+ { data_type => "integer", is_auto_increment => 1, is_nullable => 0 },
+ "club_template_id",
+ { data_type => "integer", is_foreign_key => 1, is_nullable => 0 },
+ "name",
+ { data_type => "tinytext", is_nullable => 0 },
+ "description",
+ { data_type => "text", is_nullable => 1 },
+ "authorised_value_category",
+ { data_type => "varchar", is_nullable => 1, size => 16 },
+);
+
+=head1 PRIMARY KEY
+
+=over 4
+
+=item * L</id>
+
+=back
+
+=cut
+
+__PACKAGE__->set_primary_key("id");
+
+=head1 RELATIONS
+
+=head2 club_fields
+
+Type: has_many
+
+Related object: L<Koha::Schema::Result::ClubField>
+
+=cut
+
+__PACKAGE__->has_many(
+ "club_fields",
+ "Koha::Schema::Result::ClubField",
+ { "foreign.club_template_field_id" => "self.id" },
+ { cascade_copy => 0, cascade_delete => 0 },
+);
+
+=head2 club_template
+
+Type: belongs_to
+
+Related object: L<Koha::Schema::Result::ClubTemplate>
+
+=cut
+
+__PACKAGE__->belongs_to(
+ "club_template",
+ "Koha::Schema::Result::ClubTemplate",
+ { id => "club_template_id" },
+ { is_deferrable => 1, on_delete => "CASCADE", on_update => "CASCADE" },
+);
+
+
+# Created by DBIx::Class::Schema::Loader v0.07040 @ 2015-01-12 09:56:17
+# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:P73ABSn2tzlTYbD3nov21g
+
+
+# You can replace this text with custom content, and it will be preserved on regeneration
+1;
}
sub Get {
- my ( $self, $category, $opac ) = @_;
- return GetAuthorisedValues( $category, $opac );
+ my ( $self, $category, $selected, $opac ) = @_;
+ return GetAuthorisedValues( $category, $selected, $opac );
}
sub GetAuthValueDropbox {
return Koha::Patrons->find( $borrowernumber )->has_overdues;
}
-
1;
--- /dev/null
+#!/usr/bin/perl
+
+# Copyright 2013 ByWater Solutions
+#
+# 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 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, see <http://www.gnu.org/licenses>.
+
+use Modern::Perl;
+
+use CGI;
+
+use C4::Auth;
+use C4::Output;
+use Koha::Database;
+use Koha::DateUtils qw(dt_from_string);
+use Koha::Clubs;
+use Koha::Club::Fields;
+
+my $cgi = new CGI;
+
+my ( $template, $loggedinuser, $cookie ) = get_template_and_user(
+ {
+ template_name => 'clubs/clubs-add-modify.tt',
+ query => $cgi,
+ type => 'intranet',
+ authnotrequired => 0,
+ flagsrequired => { clubs => 'edit_clubs' },
+ }
+);
+
+my $schema = Koha::Database->new()->schema();
+
+my $id = $cgi->param('id');
+my $club = $id ? Koha::Clubs->find($id) : Koha::Club->new();
+my $stored = $cgi->param('name') ? $id ? 'updated' : 'stored' : undef;
+
+my $club_template_id = $cgi->param('club_template_id');
+my $club_template = $club->club_template() || Koha::Club::Templates->find($club_template_id);
+$club_template_id ||= $club_template->id();
+
+my $date_start = $cgi->param('date_start');
+$date_start = $date_start ? dt_from_string($date_start) : undef;
+my $date_end = $cgi->param('date_end');
+$date_end = $date_end ? dt_from_string($date_end) : undef;
+
+if ( $cgi->param('name') ) { # Update or create club
+ $club->set(
+ {
+ club_template_id => $cgi->param('club_template_id') || undef,
+ name => $cgi->param('name') || undef,
+ description => $cgi->param('description') || undef,
+ branchcode => $cgi->param('branchcode') || undef,
+ date_start => $date_start,
+ date_end => $date_end,
+ date_updated => dt_from_string(),
+ }
+ )->store();
+
+ my @club_template_field_id = $cgi->multi_param('club_template_field_id');
+ my @club_field_id = $cgi->multi_param('club_field_id');
+ my @club_field = $cgi->multi_param('club_field');
+
+ for ( my $i = 0 ; $i < @club_template_field_id ; $i++ ) {
+ my $club_template_field_id = $club_template_field_id[$i] || undef;
+ my $club_field_id = $club_field_id[$i] || undef;
+ my $club_field = $club_field[$i] || undef;
+
+ my $field =
+ $club_field_id
+ ? Koha::Club::Fields->find($club_field_id)
+ : Koha::Club::Field->new();
+
+ $field->set(
+ {
+ club_id => $club->id(),
+ club_template_field_id => $club_template_field_id,
+ value => $club_field,
+ }
+ )->store();
+ }
+
+ $id ||= $club->id();
+
+ print $cgi->redirect("/cgi-bin/koha/clubs/clubs.pl?stored=$stored&club_id=$id");
+ exit;
+}
+
+$club = Koha::Clubs->find($id);
+
+$template->param(
+ club_template => $club_template,
+ club => $club,
+);
+
+output_html_with_http_headers( $cgi, $cookie, $template->output );
--- /dev/null
+#!/usr/bin/perl
+
+# Copyright 2013 ByWater Solutions
+#
+# 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 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, see <http://www.gnu.org/licenses>.
+
+use Modern::Perl;
+
+use CGI;
+
+use C4::Auth;
+use C4::Output;
+
+use Koha::Clubs;
+use Koha::Club::Templates;
+
+my $cgi = new CGI;
+
+my ( $template, $loggedinuser, $cookie ) = get_template_and_user(
+ {
+ template_name => "clubs/clubs.tt",
+ query => $cgi,
+ type => "intranet",
+ authnotrequired => 0,
+ flagsrequired => { clubs => '*' },
+ }
+);
+
+my $stored = $cgi->param('stored');
+my $club_template_id = $cgi->param('club_template_id');
+my $club_id = $cgi->param('club_id');
+
+my $club_template = $club_template_id ? Koha::Club::Templates->find( $club_template_id ) : undef;
+my $club = $club_id ? Koha::Clubs->find( $club_id ) : undef;
+
+my @club_templates = Koha::Club::Templates->search();
+my @clubs = Koha::Clubs->search();
+
+$template->param(
+ stored => $stored,
+ club_template => $club_template,
+ club => $club,
+ club_templates => \@club_templates,
+ clubs => \@clubs,
+);
+
+output_html_with_http_headers( $cgi, $cookie, $template->output );
--- /dev/null
+#!/usr/bin/perl
+
+# Copyright 2013 ByWater Solutions
+#
+# 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 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, see <http://www.gnu.org/licenses>.
+
+use Modern::Perl;
+
+use CGI;
+
+use C4::Auth;
+use C4::Output;
+
+use Koha::Patrons;
+use Koha::Club::Enrollments;
+
+my $cgi = new CGI;
+
+my ( $template, $loggedinuser, $cookie ) = get_template_and_user(
+ {
+ template_name => "clubs/patron-clubs-tab.tt",
+ query => $cgi,
+ type => "intranet",
+ authnotrequired => 0,
+ flagsrequired => { clubs => '*' },
+ }
+);
+
+my $patronnumber = $cgi->param('borrowernumber');
+
+my $patron = Koha::Patrons->find($patronnumber);
+
+my @enrollments = $patron->get_club_enrollments();
+my @clubs = $patron->get_enrollable_clubs();
+
+$template->param(
+ enrollments => \@enrollments,
+ clubs => \@clubs,
+ borrowernumber => $patronnumber
+);
+
+output_html_with_http_headers( $cgi, $cookie, $template->output );
--- /dev/null
+#!/usr/bin/perl
+
+# Copyright 2013 ByWater Solutions
+#
+# 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 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, see <http://www.gnu.org/licenses>.
+
+use Modern::Perl;
+
+use CGI;
+
+use C4::Auth;
+use C4::Output;
+use Koha::Clubs;
+
+my $cgi = new CGI;
+
+my ( $template, $loggedinuser, $cookie ) = get_template_and_user(
+ {
+ template_name => "clubs/patron-enroll.tt",
+ query => $cgi,
+ type => "intranet",
+ authnotrequired => 0,
+ flagsrequired => { clubs => '*' },
+ }
+);
+
+my $id = $cgi->param('id');
+my $borrowernumber = $cgi->param('borrowernumber');
+
+my $club = Koha::Clubs->find($id);
+
+$template->param(
+ club => $club,
+ borrowernumber => $borrowernumber,
+);
+
+output_html_with_http_headers( $cgi, $cookie, $template->output );
--- /dev/null
+#!/usr/bin/perl
+
+# Copyright 2013 ByWater Solutions
+#
+# 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 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, see <http://www.gnu.org/licenses>.
+
+use Modern::Perl;
+
+use CGI;
+
+use C4::Auth;
+use C4::Output;
+
+use Koha::DateUtils qw(dt_from_string);
+use Koha::Club::Templates;
+use Koha::Club::Template::Fields;
+use Koha::Club::Template::EnrollmentFields;
+
+use Koha::Database;
+my $schema = Koha::Database->new()->schema();
+
+my $cgi = new CGI;
+
+my ( $template, $loggedinuser, $cookie ) = get_template_and_user(
+ {
+ template_name => 'clubs/templates-add-modify.tt',
+ query => $cgi,
+ type => 'intranet',
+ authnotrequired => 0,
+ flagsrequired => { clubs => 'edit_templates' },
+ }
+);
+
+my $id = $cgi->param('id');
+
+my $club_template;
+my $stored;
+
+if ( $cgi->param('name') ) { # Update or create club
+ if ($id) {
+ $club_template = Koha::Club::Templates->find($id);
+ $stored = 'updated';
+ }
+ else {
+ $club_template = Koha::Club::Template->new();
+ $stored = 'created';
+ }
+
+ $club_template->set(
+ {
+ id => $id || undef,
+ name => $cgi->param('name') || undef,
+ description => $cgi->param('description') || undef,
+ branchcode => $cgi->param('branchcode') || undef,
+ date_updated => dt_from_string(),
+ is_email_required => $cgi->param('is_email_required') ? 1 : 0,
+ is_enrollable_from_opac => $cgi->param('is_enrollable_from_opac') ? 1 : 0,
+ }
+ )->store();
+
+ $id ||= $club_template->id();
+
+ # Update club creation fields
+ my @field_id = $cgi->multi_param('club_template_field_id');
+ my @field_name = $cgi->multi_param('club_template_field_name');
+ my @field_description = $cgi->multi_param('club_template_field_description');
+ my @field_authorised_value_category = $cgi->multi_param('club_template_field_authorised_value_category');
+
+ my @field_delete = $cgi->multi_param('club_template_field_delete');
+
+ for ( my $i = 0 ; $i < @field_id ; $i++ ) {
+ my $field_id = $field_id[$i];
+ my $field_name = $field_name[$i];
+ my $field_description = $field_description[$i];
+ my $field_authorised_value_category = $field_authorised_value_category[$i];
+
+ my $field =
+ $field_id
+ ? Koha::Club::Template::Fields->find($field_id)
+ : Koha::Club::Template::Field->new();
+
+ if ( grep( /^$field_id$/, @field_delete ) ) {
+ $field->delete();
+ }
+ else {
+ $field->set(
+ {
+ club_template_id => $id,
+ name => $field_name,
+ description => $field_description,
+ authorised_value_category => $field_authorised_value_category,
+ }
+ )->store();
+ }
+ }
+
+ # Update club enrollment fields
+ @field_id = $cgi->multi_param('club_template_enrollment_field_id');
+ @field_name = $cgi->multi_param('club_template_enrollment_field_name');
+ @field_description = $cgi->multi_param('club_template_enrollment_field_description');
+ @field_authorised_value_category = $cgi->multi_param('club_template_enrollment_field_authorised_value_category');
+
+ @field_delete = $cgi->multi_param('club_template_enrollment_field_delete');
+
+ for ( my $i = 0 ; $i < @field_id ; $i++ ) {
+ my $field_id = $field_id[$i];
+ my $field_name = $field_name[$i];
+ my $field_description = $field_description[$i];
+ my $field_authorised_value_category = $field_authorised_value_category[$i];
+
+ my $field =
+ $field_id
+ ? Koha::Club::Template::EnrollmentFields->find($field_id)
+ : Koha::Club::Template::EnrollmentField->new();
+
+ if ( grep( /^$field_id$/, @field_delete ) ) {
+ $field->delete();
+ }
+ else {
+ $field->set(
+ {
+ id => $field_id,
+ club_template_id => $id,
+ name => $field_name,
+ description => $field_description,
+ authorised_value_category => $field_authorised_value_category,
+ }
+ )->store();
+ }
+ }
+
+ print $cgi->redirect("/cgi-bin/koha/clubs/clubs.pl?stored=$stored&club_template_id=$id");
+ exit;
+}
+
+$club_template ||= Koha::Club::Templates->find($id);
+$template->param( club_template => $club_template );
+
+output_html_with_http_headers( $cgi, $cookie, $template->output );
--- /dev/null
+--
+-- Table structure for table 'club_templates'
+--
+
+CREATE TABLE IF NOT EXISTS club_templates (
+ id int(11) NOT NULL AUTO_INCREMENT,
+ `name` tinytext NOT NULL,
+ description text,
+ is_enrollable_from_opac tinyint(1) NOT NULL DEFAULT '0',
+ is_email_required tinyint(1) NOT NULL DEFAULT '0',
+ branchcode varchar(10) NULL DEFAULT NULL,
+ date_created timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ date_updated timestamp NULL DEFAULT NULL,
+ is_deletable tinyint(1) NOT NULL DEFAULT '1',
+ PRIMARY KEY (id),
+ KEY ct_branchcode (branchcode),
+ CONSTRAINT `club_templates_ibfk_1` FOREIGN KEY (branchcode) REFERENCES `branches` (branchcode) ON DELETE CASCADE ON UPDATE CASCADE
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
+
+--
+-- Table structure for table 'clubs'
+--
+
+CREATE TABLE IF NOT EXISTS clubs (
+ id int(11) NOT NULL AUTO_INCREMENT,
+ club_template_id int(11) NOT NULL,
+ `name` tinytext NOT NULL,
+ description text,
+ date_start date DEFAULT NULL,
+ date_end date DEFAULT NULL,
+ branchcode varchar(10) NULL DEFAULT NULL,
+ date_created timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ date_updated timestamp NULL DEFAULT NULL,
+ PRIMARY KEY (id),
+ KEY club_template_id (club_template_id),
+ KEY branchcode (branchcode),
+ CONSTRAINT clubs_ibfk_1 FOREIGN KEY (club_template_id) REFERENCES club_templates (id) ON DELETE CASCADE ON UPDATE CASCADE,
+ CONSTRAINT clubs_ibfk_2 FOREIGN KEY (branchcode) REFERENCES branches (branchcode)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
+
+--
+-- Table structure for table 'club_enrollments'
+--
+
+CREATE TABLE IF NOT EXISTS club_enrollments (
+ id int(11) NOT NULL AUTO_INCREMENT,
+ club_id int(11) NOT NULL,
+ borrowernumber int(11) NOT NULL,
+ date_enrolled timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ date_canceled timestamp NULL DEFAULT NULL,
+ date_created timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ date_updated timestamp NULL DEFAULT NULL,
+ branchcode varchar(10) NULL DEFAULT NULL,
+ PRIMARY KEY (id),
+ KEY club_id (club_id),
+ KEY borrowernumber (borrowernumber),
+ KEY branchcode (branchcode),
+ CONSTRAINT club_enrollments_ibfk_1 FOREIGN KEY (club_id) REFERENCES clubs (id) ON DELETE CASCADE ON UPDATE CASCADE,
+ CONSTRAINT club_enrollments_ibfk_2 FOREIGN KEY (borrowernumber) REFERENCES borrowers (borrowernumber) ON DELETE CASCADE ON UPDATE CASCADE,
+ CONSTRAINT club_enrollments_ibfk_3 FOREIGN KEY (branchcode) REFERENCES branches (branchcode) ON DELETE SET NULL ON UPDATE CASCADE
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
+
+--
+-- Table structure for table 'club_template_enrollment_fields'
+--
+
+CREATE TABLE IF NOT EXISTS club_template_enrollment_fields (
+ id int(11) NOT NULL AUTO_INCREMENT,
+ club_template_id int(11) NOT NULL,
+ `name` tinytext NOT NULL,
+ description text,
+ authorised_value_category varchar(16) DEFAULT NULL,
+ PRIMARY KEY (id),
+ KEY club_template_id (club_template_id),
+ CONSTRAINT club_template_enrollment_fields_ibfk_1 FOREIGN KEY (club_template_id) REFERENCES club_templates (id) ON DELETE CASCADE ON UPDATE CASCADE
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
+
+--
+-- Table structure for table 'club_enrollment_fields'
+--
+
+CREATE TABLE IF NOT EXISTS club_enrollment_fields (
+ id int(11) NOT NULL AUTO_INCREMENT,
+ club_enrollment_id int(11) NOT NULL,
+ club_template_enrollment_field_id int(11) NOT NULL,
+ `value` text NOT NULL,
+ PRIMARY KEY (id),
+ KEY club_enrollment_id (club_enrollment_id),
+ KEY club_template_enrollment_field_id (club_template_enrollment_field_id),
+ CONSTRAINT club_enrollment_fields_ibfk_1 FOREIGN KEY (club_enrollment_id) REFERENCES club_enrollments (id) ON DELETE CASCADE ON UPDATE CASCADE,
+ CONSTRAINT club_enrollment_fields_ibfk_2 FOREIGN KEY (club_template_enrollment_field_id) REFERENCES club_template_enrollment_fields (id) ON DELETE CASCADE ON UPDATE CASCADE
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
+
+--
+-- Table structure for table 'club_template_fields'
+--
+
+CREATE TABLE IF NOT EXISTS club_template_fields (
+ id int(11) NOT NULL AUTO_INCREMENT,
+ club_template_id int(11) NOT NULL,
+ `name` tinytext NOT NULL,
+ description text,
+ authorised_value_category varchar(16) DEFAULT NULL,
+ PRIMARY KEY (id),
+ KEY club_template_id (club_template_id),
+ CONSTRAINT club_template_fields_ibfk_1 FOREIGN KEY (club_template_id) REFERENCES club_templates (id) ON DELETE CASCADE ON UPDATE CASCADE
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
+
+--
+-- Table structure for table 'club_fields'
+--
+
+CREATE TABLE IF NOT EXISTS club_fields (
+ id int(11) NOT NULL AUTO_INCREMENT,
+ club_template_field_id int(11) NOT NULL,
+ club_id int(11) NOT NULL,
+ `value` text,
+ PRIMARY KEY (id),
+ KEY club_template_field_id (club_template_field_id),
+ KEY club_id (club_id),
+ CONSTRAINT club_fields_ibfk_3 FOREIGN KEY (club_template_field_id) REFERENCES club_template_fields (id) ON DELETE CASCADE ON UPDATE CASCADE,
+ CONSTRAINT club_fields_ibfk_4 FOREIGN KEY (club_id) REFERENCES clubs (id) ON DELETE CASCADE ON UPDATE CASCADE
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
+
+INSERT IGNORE INTO userflags (bit, flag, flagdesc, defaulton) VALUES (21, 'clubs', 'Patron clubs', '0');
+
+INSERT IGNORE INTO permissions (module_bit, code, description) VALUES
+ (21, 'edit_templates', 'Create and update club templates'),
+ (21, 'edit_clubs', 'Create and update clubs'),
+ (21, 'enroll', 'Enroll patrons in clubs')
+;
CONSTRAINT `deletedrecord_metadata_fk_1` FOREIGN KEY (biblionumber) REFERENCES deletedbiblio (biblionumber) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
+--
+-- Table structure for table 'club_templates'
+--
+
+CREATE TABLE IF NOT EXISTS club_templates (
+ id int(11) NOT NULL AUTO_INCREMENT,
+ `name` tinytext NOT NULL,
+ description text,
+ is_enrollable_from_opac tinyint(1) NOT NULL DEFAULT '0',
+ is_email_required tinyint(1) NOT NULL DEFAULT '0',
+ branchcode varchar(10) NULL DEFAULT NULL,
+ date_created timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ date_updated timestamp NULL DEFAULT NULL,
+ is_deletable tinyint(1) NOT NULL DEFAULT '1',
+ PRIMARY KEY (id),
+ KEY ct_branchcode (branchcode),
+ CONSTRAINT `club_templates_ibfk_1` FOREIGN KEY (`branchcode`) REFERENCES `branches` (`branchcode`) ON DELETE CASCADE ON UPDATE CASCADE
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
+
+--
+-- Table structure for table 'clubs'
+--
+
+CREATE TABLE IF NOT EXISTS clubs (
+ id int(11) NOT NULL AUTO_INCREMENT,
+ club_template_id int(11) NOT NULL,
+ `name` tinytext NOT NULL,
+ description text,
+ date_start date DEFAULT NULL,
+ date_end date DEFAULT NULL,
+ branchcode varchar(10) NULL DEFAULT NULL,
+ date_created timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ date_updated timestamp NULL DEFAULT NULL,
+ PRIMARY KEY (id),
+ KEY club_template_id (club_template_id),
+ KEY branchcode (branchcode),
+ CONSTRAINT clubs_ibfk_1 FOREIGN KEY (club_template_id) REFERENCES club_templates (id) ON DELETE CASCADE ON UPDATE CASCADE,
+ CONSTRAINT clubs_ibfk_2 FOREIGN KEY (branchcode) REFERENCES branches (branchcode)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
+
+--
+-- Table structure for table 'club_enrollments'
+--
+
+CREATE TABLE IF NOT EXISTS club_enrollments (
+ id int(11) NOT NULL AUTO_INCREMENT,
+ club_id int(11) NOT NULL,
+ borrowernumber int(11) NOT NULL,
+ date_enrolled timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ date_canceled timestamp NULL DEFAULT NULL,
+ date_created timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ date_updated timestamp NULL DEFAULT NULL,
+ branchcode varchar(10) NULL DEFAULT NULL,
+ PRIMARY KEY (id),
+ KEY club_id (club_id),
+ KEY borrowernumber (borrowernumber),
+ KEY branchcode (branchcode),
+ CONSTRAINT club_enrollments_ibfk_1 FOREIGN KEY (club_id) REFERENCES clubs (id) ON DELETE CASCADE ON UPDATE CASCADE,
+ CONSTRAINT club_enrollments_ibfk_2 FOREIGN KEY (borrowernumber) REFERENCES borrowers (borrowernumber) ON DELETE CASCADE ON UPDATE CASCADE,
+ CONSTRAINT club_enrollments_ibfk_3 FOREIGN KEY (branchcode) REFERENCES branches (branchcode) ON DELETE SET NULL ON UPDATE CASCADE
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
+
+--
+-- Table structure for table 'club_template_enrollment_fields'
+--
+
+CREATE TABLE IF NOT EXISTS club_template_enrollment_fields (
+ id int(11) NOT NULL AUTO_INCREMENT,
+ club_template_id int(11) NOT NULL,
+ `name` tinytext NOT NULL,
+ description text,
+ authorised_value_category varchar(16) DEFAULT NULL,
+ PRIMARY KEY (id),
+ KEY club_template_id (club_template_id),
+ CONSTRAINT club_template_enrollment_fields_ibfk_1 FOREIGN KEY (club_template_id) REFERENCES club_templates (id) ON DELETE CASCADE ON UPDATE CASCADE
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
+
+--
+-- Table structure for table 'club_enrollment_fields'
+--
+
+CREATE TABLE IF NOT EXISTS club_enrollment_fields (
+ id int(11) NOT NULL AUTO_INCREMENT,
+ club_enrollment_id int(11) NOT NULL,
+ club_template_enrollment_field_id int(11) NOT NULL,
+ `value` text NOT NULL,
+ PRIMARY KEY (id),
+ KEY club_enrollment_id (club_enrollment_id),
+ KEY club_template_enrollment_field_id (club_template_enrollment_field_id),
+ CONSTRAINT club_enrollment_fields_ibfk_1 FOREIGN KEY (club_enrollment_id) REFERENCES club_enrollments (id) ON DELETE CASCADE ON UPDATE CASCADE,
+ CONSTRAINT club_enrollment_fields_ibfk_2 FOREIGN KEY (club_template_enrollment_field_id) REFERENCES club_template_enrollment_fields (id) ON DELETE CASCADE ON UPDATE CASCADE
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
+
+--
+-- Table structure for table 'club_template_fields'
+--
+
+CREATE TABLE IF NOT EXISTS club_template_fields (
+ id int(11) NOT NULL AUTO_INCREMENT,
+ club_template_id int(11) NOT NULL,
+ `name` tinytext NOT NULL,
+ description text,
+ authorised_value_category varchar(16) DEFAULT NULL,
+ PRIMARY KEY (id),
+ KEY club_template_id (club_template_id),
+ CONSTRAINT club_template_fields_ibfk_1 FOREIGN KEY (club_template_id) REFERENCES club_templates (id) ON DELETE CASCADE ON UPDATE CASCADE
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
+
+--
+-- Table structure for table 'club_fields'
+--
+
+CREATE TABLE IF NOT EXISTS club_fields (
+ id int(11) NOT NULL AUTO_INCREMENT,
+ club_template_field_id int(11) NOT NULL,
+ club_id int(11) NOT NULL,
+ `value` text,
+ PRIMARY KEY (id),
+ KEY club_template_field_id (club_template_field_id),
+ KEY club_id (club_id),
+ CONSTRAINT club_fields_ibfk_3 FOREIGN KEY (club_template_field_id) REFERENCES club_template_fields (id) ON DELETE CASCADE ON UPDATE CASCADE,
+ CONSTRAINT club_fields_ibfk_4 FOREIGN KEY (club_id) REFERENCES clubs (id) ON DELETE CASCADE ON UPDATE CASCADE
+>>>>>>> Bug 12461 - Add patron clubs feature
+>>>>>>> Bug 12461 - Add patron clubs feature
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
+
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
(17,'staffaccess','Allow staff members to modify permissions for other staff members',0),
(18,'coursereserves','Course reserves',0),
(19, 'plugins', 'Koha plugins', '0'),
-(20, 'lists', 'Lists', 0)
+(20, 'lists', 'Lists', 0),
+(21, 'clubs', 'Patron clubs', '0')
;
(19, 'tool', 'Use tool plugins'),
(19, 'report', 'Use report plugins'),
(19, 'configure', 'Configure plugins'),
- (20, 'delete_public_lists', 'Delete public lists')
+ (20, 'delete_public_lists', 'Delete public lists'),
+ (21, 'edit_templates', 'Create and update club templates'),
+ (21, 'edit_clubs', 'Create and update clubs'),
+ (21, 'enroll', 'Enroll patrons in clubs')
;
[%- CASE 'coursereserves' -%]<span>Course reserves</span>
[%- CASE 'plugins' -%]<span>Koha plugins</span>
[%- CASE 'lists' -%]<span>Lists</span>
+ [%- CASE 'clubs' -%]<span>Patron clubs</span>
[%- END -%]
[%- END -%]
[%- CASE 'delete_public_lists' -%]<span>Delete public lists</span>
[%- CASE 'upload_general_files' -%]<span>Upload any file</span>
[%- CASE 'upload_manage' -%]<span>Manage uploaded files (<i>Useless without upload_general_files</i>)</span>
+ [%- CASE 'edit_clubs' -%]<span>Create and edit clubs</span>
+ [%- CASE 'edit_templates' -%]<span>Create and edit club templates</span>
+ [%- CASE 'enroll' -%]<span>Enroll patrons in clubs</span>
[%- END -%]
[%- END -%]
[% IF ( CAN_user_tools_manage_patron_lists ) %]
<li><a href="/cgi-bin/koha/patron_lists/lists.pl">Patron lists</a></li>
[% END %]
+ [% IF (CAN_user_clubs) %]
+ <li><a href="/cgi-bin/koha/clubs/clubs.pl">Patron clubs</a></li>
+ [% END %]
[% IF ( CAN_user_tools_moderate_comments ) %]
<li><a href="/cgi-bin/koha/reviews/reviewswaiting.pl">Comments</a></li>
[% END %]
}
});
+ if ( $('#clubs-tab').length ) {
+ $('#clubs-tab-link').on('click', function() {
+ $('#clubs-tab').text(_("Loading..."));
+ $('#clubs-tab').load('/cgi-bin/koha/clubs/patron-clubs-tab.pl?borrowernumber=[% borrowernumber %]');
+ });
+ }
+
[% IF !( CircAutoPrintQuickSlip == 'clear' ) %]
// listen submit to trigger qslip on empty checkout
$('#mainform').bind('submit',function() {
[% END %]
</li>
+ [% SET enrollments = patron.get_club_enrollments.size || 0 %]
+ [% SET enrollable = patron.get_enrollable_clubs.size || 0 %]
+ [% IF CAN_user_clubs && ( enrollable || enrollments ) %]
+ <li>
+ <a id="clubs-tab-link" href="#clubs-tab">
+ Clubs ([% enrollments %]/[% enrollable %])
+ </a>
+ </li>
+ [% END %]
+
[% IF relatives_issues_count %]
<li><a id="relatives-issues-tab" href="#relatives-issues">Relatives' checkouts</a></li>
[% END %]
</div>
[% END %]
+[% IF CAN_user_clubs && ( enrollable || enrollments ) %]
+ <div id="clubs-tab">
+ Loading...
+ </div>
+[% END %]
+
[% INCLUDE borrower_debarments.inc %]
<div id="reserves">
--- /dev/null
+[% USE KohaDates %]
+[% USE Branches %]
+[% USE AuthorisedValues %]
+[% SET AuthorisedValuesCategories = AuthorisedValues.GetCategories %]
+[% INCLUDE 'doc-head-open.inc' %]
+<title>Koha › Tools › Patron clubs › Club</title>
+[% INCLUDE 'doc-head-close.inc' %]
+[% INCLUDE 'calendar.inc' %]
+</head>
+
+<body id="clubs_add_modify" class="clubs">
+[% INCLUDE 'header.inc' %]
+[% INCLUDE 'cat-search.inc' %]
+<div id="breadcrumbs"><a href="/cgi-bin/koha/mainpage.pl">Home</a> › <a href="/cgi-bin/koha/tools/tools-home.pl">Tools</a> › <a href="clubs.pl">Patron clubs</a> › Add / modify club</div>
+
+<div class="yui-t7">
+ <div class="yui-main">
+ <form method="post" class="validated">
+ <input type="hidden" name="id" value="[% club.id %]" />
+ <input type="hidden" name="club_template_id" value="[% club_template.id %]" />
+
+ <fieldset class="rows">
+
+ <legend>
+ [% IF club %]
+ Modify club <i>[% club.name %]</i>
+ [% ELSE %]
+ Create a new <i>[% club_template.name %]</i> club
+ [% END %]
+ </legend>
+
+ <ol>
+ <li>
+ <label class="required" for="name">Name:</label>
+ <input id="club-name" name="name" type="text" value="[% club.name %]" required="required"/>
+ <span class="required">Required</span>
+ </li>
+
+ <li>
+ <label for="description">Description:</label>
+ <input id="club-template-name" name="description" type="text" value="[% club.description %]" />
+ </li>
+
+ <li>
+ <label for="date_start">Start date:</label>
+ <input name="date_start" id="from" size="10" readonly="readonly" class="datepickerfrom" value="[% club.date_start | $KohaDates %]">
+ </li>
+
+ <li>
+ <label for="date_end">End date:</label>
+ <input name="date_end" id="to" size="10" readonly="readonly" class="datepickerto" value="[% club.date_end | $KohaDates %]" >
+ </li>
+
+ <li>
+ <label for="name">Library:</label>
+ <select name="branchcode" id="club-template-branchcode">
+ <option value=""> </option>
+ [% PROCESS options_for_libraries libraries => Branches.all( selected => club.branch.branchcode ) %]
+ </select>
+ </li>
+
+ [% IF club %]
+ [% FOREACH f IN club.club_fields %]
+ <li>
+ <input type="hidden" name="club_template_field_id" value="[% f.club_template_field.id %]" />
+ <input type="hidden" name="club_field_id" value="[% f.id %]" />
+
+ <label for="club_field">[% f.club_template_field.name %]</label>
+ [% IF f.club_template_field.authorised_value_category %]
+ <select name="club_field">
+ [% FOREACH a IN AuthorisedValues.Get( f.club_template_field.authorised_value_category ) %]
+ [% IF a.authorised_value == f.value %]
+ <option value="[% a.authorised_value %]" selected="selected">[% a.lib %]</option>
+ [% ELSE %]
+ <option value="[% a.authorised_value %]">[% a.lib %]</option>
+ [% END %]
+ [% END %]
+ </select>
+ [% ELSE %]
+ <input type="text" name="club_field" value="[% f.value %]" />
+ [% END %]
+ </li>
+ [% END %]
+ [% ELSE %]
+ [% FOREACH f IN club_template.club_template_fields %]
+ <li>
+ <input type="hidden" name="club_template_field_id" value="[% f.id %]" />
+
+ <label for="club_field">[% f.name %]</label>
+ [% IF f.authorised_value_category %]
+ <select name="club_field">
+ [% FOREACH a IN AuthorisedValues.Get( f.authorised_value_category ) %]
+ <option value="[% a.authorised_value %]">[% a.lib %]</option>
+ [% END %]
+ </select>
+ [% ELSE %]
+ <input type="text" name="club_field" />
+ [% END %]
+ </li>
+ [% END %]
+ [% END %]
+
+ </ol>
+
+ </fieldset>
+
+ <fieldset class="action">
+ <input type="submit" class="btn btn-default" value="Save" />
+ <a href="clubs.pl" class="cancel">Cancel</a>
+ </fieldset>
+ </form>
+ </div>
+</div>
+
+[% INCLUDE 'intranet-bottom.inc' %]
--- /dev/null
+[% USE Branches %]
+[% USE Koha %]
+[% INCLUDE 'doc-head-open.inc' %]
+<title>Koha › Tools › Patron clubs</title>
+[% INCLUDE 'doc-head-close.inc' %]
+
+<link rel="stylesheet" type="text/css" href="[% interface %]/[% theme %]/css/datatables.css" />
+[% INCLUDE 'datatables.inc' %]
+
+<script type="text/javascript">
+//<![CDATA[
+ $(document).ready(function() {
+ tTable = $('#club-templates-table').dataTable($.extend(true, {}, dataTablesDefaults, {
+ "sPaginationType": "four_button",
+ "sDom": 'C<"top pager"ilpf><"#filter_c">tr<"bottom pager"ip>',
+ "aoColumnDefs": [
+ { "aTargets": [ -1, -2 ], "bSortable": false, "bSearchable": false },
+ ]
+ } ));
+
+ cTable = $('#clubs-table').dataTable($.extend(true, {}, dataTablesDefaults, {
+ "sPaginationType": "four_button",
+ "sDom": 'C<"top pager"ilpf><"#filter_c">tr<"bottom pager"ip>',
+ "aoColumnDefs": [
+ { "aTargets": [ -1, -2 ], "bSortable": false, "bSearchable": false },
+ ]
+ } ));
+ });
+
+ function ConfirmDeleteTemplate( id, name, a ) {
+ if ( confirm( _("Are you sure you want to delete the club template %s?" ).format(name) ) ) {
+ $.ajax({
+ type: "POST",
+ url: '/cgi-bin/koha/svc/club/template/delete',
+ data: { id: id },
+ success: function( data ) {
+ if ( data.success ) {
+ tTable.fnDeleteRow(a.closest("tr")[0]);
+ } else {
+ alert(_("Unable to delete template!"));
+ }
+ },
+ dataType: 'json'
+ });
+ }
+ }
+
+ function ConfirmDeleteClub( id, name, a ) {
+ if ( confirm( _("Are you sure you want to delete the club %s?" ).format(name) ) ) {
+ $.ajax({
+ type: "POST",
+ url: '/cgi-bin/koha/svc/club/delete',
+ data: { id: id },
+ success: function( data ) {
+ if ( data.success ) {
+ cTable.fnDeleteRow(a.closest("tr")[0]);
+ } else {
+ alert(_("Unable to delete club!"));
+ }
+ },
+ dataType: 'json'
+ });
+ }
+ }
+//]]>
+</script>
+
+</head>
+
+<body id="clubs_clubs" class="clubs">
+[% INCLUDE 'header.inc' %]
+[% INCLUDE 'cat-search.inc' %]
+<div id="breadcrumbs"><a href="/cgi-bin/koha/mainpage.pl">Home</a> › <a href="/cgi-bin/koha/tools/tools-home.pl">Tools</a> › Patron clubs</div>
+
+<div id="doc3" class="yui-t2">
+ <div id="bd">
+ <div id="yui-main">
+ <div class="yui-b">
+ <h1>Patron clubs</h1>
+
+ [% IF club_template %]
+ <div class="dialog message">
+ [% IF stored == 'updated' %]
+ <p>Club template <i>[% club_template.name %]</i> was updated.</p>
+ [% ELSE %]
+ <p>Club template <i>[% club_template.name %]</i> was saved.</p>
+ [% END %]
+ </div>
+ [% ELSIF club %]
+ <div class="dialog message">
+ [% IF stored == 'updated' %]
+ <p>Club <i>[% club.name %]</i> was updated.</p>
+ [% ELSE %]
+ <p>Club <i>[% club.name %]</i> was saved.</p>
+ [% END %]
+ </div>
+ [% END %]
+
+ <h3>Club templates</h3>
+
+ [% IF CAN_user_clubs_edit_templates %]
+ <div class="btn-toolbar">
+ <div class="btn-group">
+ <a class="btn btn-default" href="templates-add-modify.pl"><i class="fa fa-plus"></i> New club template</a>
+ </div>
+ </div>
+ [% END %]
+
+ <table id="club-templates-table">
+ <thead>
+ <tr>
+ <th>Name</th>
+ <th>Description</th>
+ <th>Public enrollment</th>
+ <th>Email required</th>
+ <th>Library</th>
+ <th> </th>
+ <th> </th>
+ </tr>
+ </thead>
+
+ <tbody>
+ [% IF club_templates %]
+ [% FOREACH t IN club_templates %]
+ <tr>
+ <td>[% t.name %]</td>
+ <td>[% t.description %]</td>
+ <td>
+ [% IF t.is_enrollable_from_opac %]
+ Yes
+ [% ELSE %]
+ No
+ [% END %]
+ </td>
+ <td>
+ [% IF t.is_email_required %]
+ Yes
+ [% ELSE %]
+ No
+ [% END %]
+ </td>
+ <td>[% Branches.GetName( t.branchcode ) %]</td>
+ <td>
+ [% IF CAN_user_clubs_edit_templates %]
+ <a class="btn btn-default" style="white-space:nowrap" href="templates-add-modify.pl?id=[% t.id %]">
+ <i class="fa fa-edit"></i> Edit
+ </a>
+ [% END %]
+ </td>
+ <td>
+ [% IF CAN_user_clubs_edit_templates %]
+ <a class="btn btn-default" href="#" onclick='ConfirmDeleteTemplate([% t.id %], "[% t.name | html %]", $(this) ); return false;'>
+ <i class="fa fa-trash"></i> Delete
+ </a>
+ [% END %]
+ </td>
+ </tr>
+ [% END %]
+ [% ELSE %]
+ <tr>
+ <td colspan="7">
+ No club templates defined.
+ </td>
+ </td>
+ [% END %]
+ </tbody>
+ </table>
+
+ <h3>Clubs</h3>
+
+ [% IF CAN_user_clubs_edit_clubs %]
+ <div class="btn-toolbar">
+ <div class="btn-group">
+ <button class="btn btn-default dropdown-toggle" data-toggle="dropdown"><i class="fa fa-plus"></i> New club <span class="caret"></span></button>
+ <ul class="dropdown-menu">
+ [% FOREACH t IN club_templates %]
+ <li><a href="/cgi-bin/koha/clubs/clubs-add-modify.pl?club_template_id=[% t.id %]">[% t.name %]</a></li>
+ [% END %]
+ </ul>
+ </div>
+ </div>
+ [% END %]
+
+ <table id="clubs-table">
+ <thead>
+ <tr>
+ <th>Name</th>
+ <th>Template</th>
+ <th>Description</th>
+ <th>Public enrollment</th>
+ <th>Email required</th>
+ <th>Library</th>
+ <th> </th>
+ <th> </th>
+ </tr>
+ </thead>
+
+ <tbody>
+ [% IF clubs %]
+ [% FOREACH c IN clubs %]
+ <tr>
+ <td>[% c.name %]</td>
+ <td>[% c.club_template.name %]</td>
+ <td>[% c.description %]</td>
+ <td>
+ [% IF c.club_template.is_enrollable_from_opac %]
+ Yes
+ [% ELSE %]
+ No
+ [% END %]
+ </td>
+ <td>
+ [% IF c.club_template.is_email_required %]
+ Yes
+ [% ELSE %]
+ No
+ [% END %]
+ </td>
+ <td>[% Branches.GetName( c.branchcode ) %]</td>
+ <td>
+ [% IF CAN_user_clubs_edit_clubs %]
+ <a class="btn btn-default" style="white-space:nowrap" href="clubs-add-modify.pl?id=[% c.id %]">
+ <i class="fa fa-edit"></i> Edit
+ </a>
+ [% END %]
+ </td>
+ <td>
+ [% IF CAN_user_clubs_edit_clubs %]
+ <a class="btn btn-default" href="#" onclick='ConfirmDeleteClub([% c.id %], "[% c.name | html %]", $(this) ); return false;'>
+ <i class="fa fa-trash"></i> Delete
+ </a>
+ [% END %]
+ </td>
+ </tr>
+ [% END %]
+ [% ELSE %]
+ <tr>
+ <td colspan="8">
+ No club templates defined.
+ </td>
+ </td>
+ [% END %]
+ </tbody>
+ </table>
+ </div>
+ </div>
+ <div class="yui-b noprint">
+ [% INCLUDE 'tools-menu.inc' %]
+ </div>
+ </div>
+</div>
+[% INCLUDE 'intranet-bottom.inc' %]
--- /dev/null
+[% USE KohaDates %]
+
+[% IF enrollments %]
+ <table>
+ <thead>
+ <tr>
+ <th colspan="4">
+ Clubs currently enrolled in
+ </th>
+ </tr>
+ <tr>
+ <th>Name</th>
+ <th>Description</th>
+ <th>Date enrolled</th>
+ [% IF CAN_user_clubs_enroll %]<th> </th>[% END %]
+ </tr>
+ </thead>
+
+ <tbody>
+ [% FOREACH e IN enrollments %]
+ <tr>
+ <td>[% e.club.name %]</td>
+ <td>[% e.club.description %]</td>
+ <td>[% e.date_enrolled | $KohaDates %]</td>
+ [% IF CAN_user_clubs_enroll %]
+ <td>
+ <a class="btn btn-xs" onclick="cancelEnrollment( [% e.id %] )">
+ <i class="fa fa-remove"></i> Cancel
+ </a>
+ </td>
+ [% END %]
+ </tr>
+ [% END %]
+ </tbody>
+ </table>
+[% END %]
+
+[% IF clubs %]
+ <table>
+ <thead>
+ <tr>
+ <th colspan="3">
+ Clubs not enrolled in
+ </th>
+ </tr>
+ <tr>
+ <th>Name</th>
+ <th>Description</th>
+ [% IF CAN_user_clubs_enroll %]<th> </th>[% END %]
+ </tr>
+ </thead>
+
+ <tbody>
+ [% FOREACH c IN clubs %]
+ <tr>
+ <td>[% c.name %]</td>
+ <td>[% c.description %]</td>
+ [% IF CAN_user_clubs_enroll %]
+ <td>
+ <a class="btn btn-xs" onclick="loadEnrollmentForm([% c.id %])">
+ <i class="fa fa-plus"></i> Enroll
+ </a>
+ </td>
+ [% END %]
+ </tr>
+ [% END %]
+ </tbody>
+ </table>
+[% END %]
+
+[% IF CAN_user_clubs_enroll %]
+<script type="text/javascript">
+function loadEnrollmentForm( id ) {
+ $("body").css("cursor", "progress");
+ $('#clubs-tab').load('/cgi-bin/koha/clubs/patron-enroll.pl?borrowernumber=[% borrowernumber %]&id=' + id, function() {
+ $("body").css("cursor", "default");
+ });
+
+ return false;
+}
+
+function cancelEnrollment( id ) {
+ $("body").css("cursor", "progress");
+ $.ajax({
+ type: "POST",
+ url: '/cgi-bin/koha/svc/club/cancel_enrollment',
+ data: { id: id },
+ success: function( data ) {
+ if ( data.success ) {
+ $('#clubs-tab').load('/cgi-bin/koha/clubs/patron-clubs-tab.pl?borrowernumber=[% borrowernumber %]', function() {
+ $("body").css("cursor", "default");
+ });
+ } else {
+ alert(_("Unable to cancel enrollment!"));
+ }
+ },
+ dataType: 'json'
+ });
+ return false;
+}
+</script>
+[% END %]
--- /dev/null
+[% USE AuthorisedValues %]
+[% SET AuthorisedValuesCategories = AuthorisedValues.GetCategories %]
+
+<h3>
+ Enroll in <i>[% club.name %]</i>
+</h3>
+
+<div class="container">
+ <form id="patron-enrollment-form">
+ <input type="hidden" name="id" value="[% club.id %]" />
+ <input type="hidden" name="borrowernumber" value="[% borrowernumber %]" />
+ <fieldset class="rows">
+ <ol>
+ [% FOREACH f IN club.club_template.club_template_enrollment_fields %]
+ <li>
+ <label>[% f.name %]</label>
+ [% IF f.authorised_value_category %]
+ <select name="[% f.id %]">
+ [% FOREACH a IN AuthorisedValues.Get( f.authorised_value_category ) %]
+ <option value="[% a.authorised_value %]">[% a.lib %]</option>
+ [% END %]
+ </select>
+ [% ELSE %]
+ <input type="text" name="[% f.id %]" />
+ [% END %]
+ <span class="hint">[% f.description %]</span>
+ </li>
+ [% END %]
+
+ <li>
+ <a href="#" class="btn btn-default" onclick="addEnrollment(); return false;"><i class="fa fa-plus"></i> Enroll</a>
+ <a href="#" onclick="showClubs(); return false;">Cancel</a>
+ </li>
+ </ol>
+ </fieldset>
+ </form>
+</div>
+
+<script type="text/javascript">
+function addEnrollment() {
+ $("body").css("cursor", "progress");
+ $.ajax({
+ type: "POST",
+ url: '/cgi-bin/koha/svc/club/enroll',
+ data: $( "#patron-enrollment-form" ).serialize(),
+ success: function( data ) {
+ if ( data.success ) {
+ $('#clubs-tab').load('/cgi-bin/koha/clubs/patron-clubs-tab.pl?borrowernumber=[% borrowernumber %]&id=[% club.id %]', function() {
+ $("body").css("cursor", "default");
+ });
+ } else {
+ alert(_("Unable to create enrollment!"));
+ }
+ },
+ dataType: 'json'
+ });
+ return false;
+}
+
+function showClubs() {
+ $("body").css("cursor", "progress");
+ $('#clubs-tab').load('/cgi-bin/koha/clubs/patron-clubs-tab.pl?borrowernumber=[% borrowernumber %]&id=[% club.id %]', function() {
+ $("body").css("cursor", "default");
+ });
+}
+</script>
--- /dev/null
+[% USE Branches %]
+[% USE AuthorisedValues %]
+[% INCLUDE 'doc-head-open.inc' %]
+<title>Koha › Tools › Patron clubs › Club template</title>
+[% INCLUDE 'doc-head-close.inc' %]
+</head>
+
+<body id="clubs_templates_add_modify" class="clubs">
+[% INCLUDE 'header.inc' %]
+[% INCLUDE 'cat-search.inc' %]
+<div id="breadcrumbs"><a href="/cgi-bin/koha/mainpage.pl">Home</a> › <a href="/cgi-bin/koha/tools/tools-home.pl">Tools</a> › <a href="clubs.pl">Patron clubs</a> › Add / modify club template</div>
+
+<div class="yui-t7">
+ <div class="yui-main">
+ <form method="post" class="validated">
+ <input type="hidden" name="id" value="[% club_template.id %]" />
+
+ <fieldset class="rows">
+
+ <legend>
+ [% IF club_template %]
+ Modify club template <i>[% club_template.name %]</i>
+ [% ELSE %]
+ Create a new club template
+ [% END %]
+ </legend>
+
+ <ol>
+ <li>
+ <label class="required" for="name">Name:</label>
+ <input id="club-template-name" name="name" type="text" value="[% club_template.name %]" required="required"/>
+ <span class="required">Required</span>
+ </li>
+
+ <li>
+ <label for="description">Description:</label>
+ <input id="club-template-description" name="description" type="text" value="[% club_template.description %]" />
+ </li>
+
+ <li>
+ <label for="is_enrollable_from_opac">Allow public enrollment:</label>
+ [% IF club_template.is_enrollable_from_opac %]
+ <input type="checkbox" id="club-template-is-enrollable-from-opac" name="is_enrollable_from_opac" checked="checked" />
+ [% ELSE %]
+ <input type="checkbox" id="club-template-is-enrollable-from-opac" name="is_enrollable_from_opac" />
+ [% END %]
+ <span class="hint">If a template allows public enrollment, patrons can enroll in a club based on this template from the public catalog.</span>
+ </li>
+
+ <li>
+ <label for="is_email_required">Require valid email address:</label>
+ [% IF club_template.is_email_required %]
+ <input type="checkbox" id="club-template-is-email-required" name="is_email_required" checked="checked" />
+ [% ELSE %]
+ <input type="checkbox" id="club-template-is-email-required" name="is_email_required" />
+ [% END %]
+ <span class="hint">If set, a club based on this template can only be enrolled in by patrons with a valid email address.</span>
+ </li>
+
+ <li>
+ <label for="branchcode">Library:</label>
+ <select name="branchcode" id="club-template-branchcode">
+ <option value=""> </option>
+ [% PROCESS options_for_libraries libraries => Branches.all( selected => club_template.branchcode ) %]
+ </select>
+ <span class="hint">If set, only librarians logged in with this branch will be able to modify this club template.</span>
+ </li>
+
+ </ol>
+
+ <h2>Club fields:</h2>
+ <p><span class="hint">These fields will be used in the creation of clubs based on this template</span></p>
+ <span id="club-template-fields">
+ [% FOREACH f IN club_template.club_template_fields %]
+ <ul>
+ <input type="hidden" name="club_template_field_id" value="[% f.id %]" />
+ <li>
+ <label for="field-name-[% f.id %]">Name:</label>
+ <input name="club_template_field_name" id="field-name-[% f.id %]" value="[% f.name %]" />
+ </li>
+
+ <li>
+ <label for="field-description-[% f.id %]">Description:</label>
+ <input name="club_template_field_description" id="field-description-[% f.id %]" value="[% f.description %]" />
+ </li>
+
+ <li>
+ <label for="field-description-[% f.id %]">Authorised value category:</label>
+ <select name="club_template_field_authorised_value_category" id="field-authorised-value-category-[% f.id %]">
+ <option value=""> </option>
+ [% PROCESS options_for_authorised_value_categories authorised_value_categories => AuthorisedValues.GetCategories( selected => f.authorised_value_category) %]
+ </select>
+ </li>
+
+ <li>
+ <label for="field-delete-[% f.id %]">Delete field:</label>
+ <input type="checkbox" name="club_template_field_delete" id="field-delete-[% f.id %]" value="[% f.id %]" />
+ </li>
+
+ <hr/>
+ </ul>
+ [% END %]
+ </span>
+ <div class="btn-toolbar">
+ <a href="#" class="btn btn-default" onclick="$('#new-field-template').clone().attr('id','').show().appendTo('#club-template-fields'); return false;">
+ <i class="fa fa-plus"></i> Add new field
+ </a>
+ </div>
+
+ <h2>Enrollment fields:</h2>
+ <p><span class="hint">These fields will be used when enrolling a patron in a club based on this template</span></p>
+ <span id="club-template-enrollment-fields">
+ [% FOREACH f IN club_template.club_template_enrollment_fields %]
+ <ul>
+ <input type="hidden" name="club_template_enrollment_field_id" value="[% f.id %]" />
+ <li>
+ <label for="enrollment-field-name-[% f.id %]">Name:</label>
+ <input name="club_template_enrollment_field_name" id="enrollment-field-name-[% f.id %]" value="[% f.name %]" />
+ </li>
+
+ <li>
+ <label for="enrollment-field-description-[% f.id %]">Description:</label>
+ <input name="club_template_enrollment_field_description" id="enrollment-field-description-[% f.id %]" value="[% f.description %]" />
+ </li>
+
+ <li>
+ <label for="enrollment-field-description-[% f.id %]">Authorised value category:</label>
+ <select name="club_template_enrollment_field_authorised_value_category" id="enrollment-field-authorised-value-category-[% f.id %]">
+ <option value=""> </option>
+ [% PROCESS options_for_authorised_value_categories authorised_value_categories => AuthorisedValues.GetCategories( selected => f.authorised_value_category) %]
+ </select>
+ </li>
+
+ <li>
+ <label for="enrollment-field-delete-[% f.id %]">Delete field:</label>
+ <input type="checkbox" name="club_template_enrollment_field_delete" id="enrollment-field-delete-[% f.id %]" value="[% f.id %]" />
+ </li>
+
+ <hr/>
+ </ul>
+ [% END %]
+ </span>
+ <div class="btn-toolbar">
+ <a href="#" class="btn btn-default" onclick="$('#new-enrollment-field-template').clone().attr('id','').show().appendTo('#club-template-enrollment-fields'); return false;">
+ <i class="fa fa-plus"></i> Add new field
+ </a>
+ </div>
+
+ </fieldset>
+
+ <fieldset class="action">
+ <input type="hidden" name="id" value="[% club_template.id %]" />
+ <input type="submit" class="btn btn-default" value="Save" />
+ <a href="clubs.pl" class="cancel">Cancel</a>
+ </fieldset>
+ </form>
+ </div>
+</div>
+
+<span id="new-field-template" style="display:none">
+ <ul>
+ <input type="hidden" name="club_template_field_id" value="" />
+
+ <li>
+ <label for="club_template_field_name">Name:</label>
+ <input name="club_template_field_name" />
+ </li>
+
+ <li>
+ <label for="club_template_field_description">Description:</label>
+ <input name="club_template_field_description" />
+ </li>
+
+ <li>
+ <label for="club_template_field_authorised_value_category">Authorised value category:</label>
+ <select name="club_template_field_authorised_value_category">
+ <option value=""> </option>
+ [% PROCESS options_for_authorised_value_categories authorised_value_categories => AuthorisedValues.GetCategories() %]
+ </select>
+ </li>
+
+ <a href="#" onclick="$(this).parent().remove(); return false;">Cancel</a>
+
+ <hr/>
+ </ul>
+</span>
+
+<span id="new-enrollment-field-template" style="display:none">
+ <ul>
+ <input type="hidden" name="club_template_enrollment_field_id" value="" />
+
+ <li>
+ <label for="club_template_enrollment_field_name">Name:</label>
+ <input name="club_template_enrollment_field_name" />
+ </li>
+
+ <li>
+ <label for="club_template_enrollment_field_description">Description:</label>
+ <input name="club_template_enrollment_field_description" />
+ </li>
+
+ <li>
+ <label for="club_template_enrollment_field_authorised_value_category">Authorised value category:</label>
+ <select name="club_template_enrollment_field_authorised_value_category">
+ <option value=""> </option>
+ [% PROCESS options_for_authorised_value_categories authorised_value_categories => AuthorisedValues.GetCategories() %]
+ </select>
+ </li>
+
+ <a href="#" onclick="$(this).parent().remove(); return false;">Cancel</a>
+
+ <hr/>
+ </ul>
+</span>
+
+[% INCLUDE 'intranet-bottom.inc' %]
columns_settings = [% ColumnsSettings.GetColumns( 'members', 'moremember', 'issues-table', 'json' ) %]
$(document).ready(function() {
+ if ( $('#clubs-tab').length ) {
+ $('#clubs-tab-link').on('click', function() {
+ $('#clubs-tab').text(_("Loading..."));
+ $('#clubs-tab').load('/cgi-bin/koha/clubs/patron-clubs-tab.pl?borrowernumber=[% borrowernumber %]');
+ });
+ }
+
$('#finesholdsissues').tabs({
// Correct table sizing for tables hidden in tabs
// http://www.datatables.net/examples/api/tabs_and_scrolling.html
</li>
[% END %]
<li><a id="debarments-tab-link" href="#reldebarments">[% debarments.size %] Restrictions</a></li>
+ [% SET enrollments = borrower.get_club_enrollments.size || 0 %]
+ [% SET enrollable = borrower.get_enrollable_clubs.size || 0 %]
+ [% IF CAN_user_clubs && ( enrollments || enrollable ) %]
+ <li>
+ <a id="clubs-tab-link" href="#clubs-tab">
+ Clubs ([% enrollments %]/[% enrollable %])
+ </a>
+ </li>
+ [% END %]
</ul>
[% INCLUDE "checkouts-table.inc" %]
[% END %]
</div>
+[% IF CAN_user_clubs && ( enrollments || enrollable ) %]
+ <div id="clubs-tab">
+ Loading...
+ </div>
+[% END %]
+
[% INCLUDE borrower_debarments.inc %]
<div id="reserves">
<dd>Manage lists of patrons.</dd>
[% END %]
+ [% IF (CAN_user_clubs) %]
+ <dt><a href="/cgi-bin/koha/clubs/clubs.pl">Patron clubs</a>
+ <dd>Manage patron clubs..</dd>
+ [% END %]
+
[% IF ( CAN_user_tools_moderate_comments ) %]
<dt><a href="/cgi-bin/koha/reviews/reviewswaiting.pl">Comments</a> [% IF ( pendingcomments ) %]<span class="number_box"><a href="/cgi-bin/koha/reviews/reviewswaiting.pl">[% pendingcomments %]</a></span>[% END %]</dt>
<dd>Moderate patron comments. </dd>
--- /dev/null
+[% USE KohaDates %]
+
+[% IF enrollments %]
+ <table id="clubs-table-enrolled" class="table table-bordered table-striped">
+ <thead>
+ <tr>
+ <th colspan="4">
+ Clubs you are currently enrolled in
+ </th>
+ </tr>
+ <tr>
+ <th>Name</th>
+ <th>Description</th>
+ <th>Date enrolled</th>
+ <th> </th>
+ </tr>
+ </thead>
+
+ <tbody>
+ [% FOREACH e IN enrollments %]
+ <tr>
+ <td>[% e.club.name %]</td>
+ <td>[% e.club.description %]</td>
+ <td>[% e.date_enrolled | $KohaDates %]</td>
+ [% IF e.club.club_template.is_enrollable_from_opac %]
+ <td>
+ <a class="btn btn-xs" onclick="cancelEnrollment( [% e.id %] )">
+ <i class="icon-remove"></i> Cancel
+ </a>
+ </td>
+ [% END %]
+ </tr>
+ [% END %]
+ </tbody>
+ </table>
+[% END %]
+
+[% IF clubs %]
+ <table id="clubs-table-unenrolled" class="table table-bordered table-striped">
+ <thead>
+ <tr>
+ <th colspan="3">
+ Clubs you can enroll in
+ </th>
+ </tr>
+ <tr>
+ <th>Name</th>
+ <th>Description</th>
+ <th> </th>
+ </tr>
+ </thead>
+
+ <tbody>
+ [% FOREACH c IN clubs %]
+ <tr>
+ <td>[% c.name %]</td>
+ <td>[% c.description %]</td>
+ <td>
+ [% IF !c.club_template.is_email_required || ( c.club_template.is_email_required && borrower.FirstValidEmailAddress ) %]
+ <a class="btn btn-xs" onclick="loadEnrollmentForm([% c.id %])">
+ <i class="icon-plus"></i> Enroll
+ </a>
+ [% ELSE %]
+ <span class="hint">You must have an email address to enroll</span>
+ [% END %]
+ </td>
+ </tr>
+ [% END %]
+ </tbody>
+ </table>
+[% END %]
+
+<script type="text/javascript">
+function loadEnrollmentForm( id ) {
+ $("body").css("cursor", "progress");
+ $('#opac-user-clubs').load('/cgi-bin/koha/clubs/enroll.pl?borrowernumber=[% borrower.borrowernumber %]&id=' + id, function() {
+ $("body").css("cursor", "default");
+ });
+
+ return false;
+}
+
+function cancelEnrollment( id ) {
+ $("body").css("cursor", "progress");
+ $.ajax({
+ type: "POST",
+ url: '/cgi-bin/koha/svc/club/cancel_enrollment',
+ data: { id: id },
+ success: function( data ) {
+ if ( data.success ) {
+ $('#opac-user-clubs').load('/cgi-bin/koha/clubs/clubs-tab.pl?borrowernumber=[% borrower.borrowernumber %]', function() {
+ $("body").css("cursor", "default");
+ });
+ } else {
+ alert(_("Unable to cancel enrollment!"));
+ }
+ },
+ dataType: 'json'
+ });
+ return false;
+}
+</script>
--- /dev/null
+[% USE AuthorisedValues %]
+[% SET AuthorisedValuesCategories = AuthorisedValues.GetCategories %]
+
+<h3>
+ Enroll in <i>[% club.name %]</i>
+</h3>
+
+<div class="container">
+ <form id="patron-enrollment-form">
+ <input type="hidden" name="id" value="[% club.id %]" />
+ <input type="hidden" name="borrowernumber" value="[% borrowernumber %]" />
+ <fieldset class="rows">
+ <ol>
+ [% FOREACH f IN club.club_template.club_template_enrollment_fields %]
+ <li>
+ <label>[% f.name %]</label>
+ [% IF f.authorised_value_category %]
+ <select name="[% f.id %]">
+ [% FOREACH a IN AuthorisedValues.Get( f.authorised_value_category ) %]
+ <option value="[% a.authorised_value %]">[% a.lib %]</option>
+ [% END %]
+ </select>
+ [% ELSE %]
+ <input type="text" name="[% f.id %]" />
+ [% END %]
+ <span class="hint">[% f.description %]</span>
+ </li>
+ [% END %]
+
+ <li>
+ <a href="#" class="btn btn-default" onclick="addEnrollment(); return false;"><i class="fa fa-plus"></i> Enroll</a>
+ <a href="#" onclick="showClubs(); return false;">Cancel</a>
+ </li>
+ </ol>
+ </fieldset>
+ </form>
+</div>
+
+<script type="text/javascript">
+function addEnrollment() {
+ $("body").css("cursor", "progress");
+ $.ajax({
+ type: "POST",
+ url: '/cgi-bin/koha/svc/club/enroll',
+ data: $( "#patron-enrollment-form" ).serialize(),
+ success: function( data ) {
+ if ( data.success ) {
+ $('#opac-user-clubs').load('/cgi-bin/koha/clubs/clubs-tab.pl?borrowernumber=[% borrowernumber %]&id=[% club.id %]', function() {
+ $("body").css("cursor", "default");
+ });
+ } else {
+ alert(_("Unable to create enrollment!"));
+ }
+ },
+ dataType: 'json'
+ });
+ return false;
+}
+
+function showClubs() {
+ $("body").css("cursor", "progress");
+ $('#opac-user-clubs').load('/cgi-bin/koha/clubs/clubs-tab.pl?borrowernumber=[% borrowernumber %]&id=[% club.id %]', function() {
+ $("body").css("cursor", "default");
+ });
+}
+</script>
[% ELSIF error == 'too_soon' %]
It is too soon after the checkout date for this item to be renewed.
[% ELSIF error == 'on_reserve' %]
- This item is on hold for another patron.
+ This item is on hold for another borrower.
[% END %]
[% END %]
</span>
[% IF ( BORROWER_INFO.amountoverzero ) %]<li><a href="#opac-user-fines">Fines ([% amountoutstanding | $Price %])</a></li>[% END %]
[% IF ( BORROWER_INFO.amountlessthanzero ) %]<li><a href="#opac-user-fines">Credits ([% amountoutstanding | $Price %])</a></li>[% END %]
[% END %]
+
+ [% IF borrower.get_club_enrollments.size || borrower.get_enrollable_clubs(1).size %]
+ <li>
+ <a id="opac-user-clubs-tab-link" href="#opac-user-clubs">
+ Clubs ([% borrower.get_club_enrollments.size %]/[% borrower.get_enrollable_clubs(1).size || 0 %])
+ </a>
+ </li>
+ [% END %]
+
[% IF ( RESERVES.count ) %]<li><a href="#opac-user-holds">Holds ([% RESERVES.count %])</a></li>[% END %]
[% IF Koha.Preference('ArticleRequests') && borrower.article_requests_current %]<li><a href="#opac-user-article-requests">Article requests ([% borrower.article_requests_current.count %])</a></li>[% END %]
[% IF ( OverDriveCirculation ) %]
[% END # IF issues_count %]
</div> <!-- / .opac-user-checkouts -->
+ [% IF borrower.get_club_enrollments_count.size || borrower.get_enrollable_clubs(1).size %]
+ <div id="opac-user-clubs">
+ Loading...
+ </div>
+ [% END %]
+
[% IF ( OPACFinesTab ) %]
<!-- FINES BOX -->
[% IF BORROWER_INFO.amountoverfive %]
[% END %]
$( ".suspend-until" ).datepicker({ minDate: 1 }); // Require that "until date" be in the future
+
+ if ( $('#opac-user-clubs').length ) {
+ $('#opac-user-clubs-tab-link').on('click', function() {
+ $('#opac-user-clubs').text(_("Loading..."));
+ $('#opac-user-clubs').load('/cgi-bin/koha/clubs/clubs-tab.pl?borrowernumber=[% borrowernumber %]');
+ });
+ }
});
//]]>
</script>
use DateTime;
use Koha::DateUtils;
use Koha::Database;
+use Koha::Patrons;
use Koha::Patron::Categories;
use Koha::Token;
PatronsPerPage => C4::Context->preference("PatronsPerPage") || 20,
relatives_issues_count => $relatives_issues_count,
relatives_borrowernumbers => \@relatives,
+ borrower => Koha::Patrons->find( $borrowernumber ),
);
output_html_with_http_headers $input, $cookie, $template->output;
--- /dev/null
+#!/usr/bin/perl
+
+# Copyright 2013 ByWater Solutions
+#
+# 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 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, see <http://www.gnu.org/licenses>.
+
+use Modern::Perl;
+
+use CGI;
+
+use C4::Auth;
+use C4::Output;
+use Koha::Patrons;
+
+my $cgi = new CGI;
+
+my ( $template, $loggedinuser, $cookie ) = get_template_and_user(
+ {
+ template_name => "clubs/clubs-tab.tt",
+ query => $cgi,
+ type => "opac",
+ authnotrequired => 0,
+ }
+);
+
+my $borrowernumber = $cgi->param('borrowernumber');
+
+my $borrower = Koha::Patrons->find($borrowernumber);
+
+my @enrollments = $borrower->get_club_enrollments();
+my @clubs = $borrower->get_enrollable_clubs( my $opac = 1 );
+
+$template->param(
+ enrollments => \@enrollments,
+ clubs => \@clubs,
+ borrower => $borrower,
+);
+
+output_html_with_http_headers( $cgi, $cookie, $template->output );
--- /dev/null
+#!/usr/bin/perl
+
+# Copyright 2013 ByWater Solutions
+#
+# 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 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, see <http://www.gnu.org/licenses>.
+
+use Modern::Perl;
+
+use CGI;
+
+use C4::Auth;
+use C4::Output;
+use Koha::Clubs;
+
+my $cgi = new CGI;
+
+my ( $template, $loggedinuser, $cookie ) = get_template_and_user(
+ {
+ template_name => "clubs/enroll.tt",
+ query => $cgi,
+ type => "opac",
+ authnotrequired => 0,
+ }
+);
+
+my $id = $cgi->param('id');
+my $borrowernumber = $cgi->param('borrowernumber');
+
+my $club = Koha::Clubs->find($id);
+
+$template->param(
+ club => $club,
+ borrowernumber => $borrowernumber,
+);
+
+output_html_with_http_headers( $cgi, $cookie, $template->output );
--- /dev/null
+#!/usr/bin/perl
+
+# Copyright 2014 ByWater Solutions
+#
+# 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 2 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.
+#
+# 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.
+#
+
+use Modern::Perl;
+
+use CGI;
+use JSON qw(to_json);
+
+use C4::Auth qw(check_cookie_auth);
+use Koha::Club::Enrollments;
+
+my $cgi = new CGI;
+
+my ( $auth_status, $sessionID ) =
+ check_cookie_auth( $cgi->cookie('CGISESSID') );
+if ( $auth_status ne "ok" ) {
+ exit 0;
+}
+
+my $borrowernumber = C4::Context->userenv->{'number'};
+
+my $id = $cgi->param('id');
+
+my $enrollment = Koha::Club::Enrollments->find($id);
+$enrollment->cancel();
+
+binmode STDOUT, ':encoding(UTF-8)';
+print $cgi->header( -type => 'text/plain', -charset => 'UTF-8' );
+
+print to_json( { success => $enrollment ? 1 : 0 } );
--- /dev/null
+#!/usr/bin/perl
+
+# Copyright 2014 ByWater Solutions
+#
+# 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 2 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.
+#
+# 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.
+#
+
+use Modern::Perl;
+
+use CGI;
+use JSON qw(to_json);
+
+use C4::Auth qw(check_cookie_auth);
+use Koha::Club::Enrollment::Field;
+use Koha::Club::Enrollment;
+use Koha::Clubs;
+
+my $cgi = new CGI;
+
+my ( $auth_status, $sessionID ) =
+ check_cookie_auth( $cgi->cookie('CGISESSID') );
+if ( $auth_status ne "ok" ) {
+ exit 0;
+}
+
+my $borrowernumber = C4::Context->userenv->{'number'};
+
+my $id = $cgi->param('id');
+
+my $enrollment;
+if ( $borrowernumber && $id ) {
+ my $club = Koha::Clubs->find($id);
+
+ if ( $club->club_template()->is_enrollable_from_opac() ) {
+ $enrollment = Koha::Club::Enrollment->new()->set(
+ {
+ club_id => $club->id(),
+ borrowernumber => $borrowernumber,
+ date_enrolled => \'NOW()',
+ date_created => \'NOW()',
+ branchcode => C4::Context->userenv
+ ? C4::Context->userenv->{'branch'}
+ : undef,
+ }
+ )->store();
+
+ my @enrollment_fields = $club->club_template()->club_template_enrollment_fields();
+
+ foreach my $e (@enrollment_fields) {
+ Koha::Club::Enrollment::Field->new()->set(
+ {
+ club_enrollment_id => $enrollment->id(),
+ club_template_enrollment_field_id => $e->id(),
+ value => $cgi->param( $e->id() ),
+ }
+ )->store();
+ }
+ }
+}
+
+binmode STDOUT, ':encoding(UTF-8)';
+print $cgi->header( -type => 'text/plain', -charset => 'UTF-8' );
+
+print to_json( { success => $enrollment ? 1 : 0 } );
--- /dev/null
+#!/usr/bin/perl
+
+# Copyright 2014 ByWater Solutions
+#
+# 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 2 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.
+#
+# 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.
+#
+
+use Modern::Perl;
+
+use CGI;
+use JSON qw(to_json);
+
+use C4::Auth qw(check_cookie_auth);
+
+use Koha::Club::Enrollments;
+
+my $cgi = new CGI;
+
+my ( $auth_status, $sessionID ) =
+ check_cookie_auth( $cgi->cookie('CGISESSID'), { clubs => 'enroll' } );
+if ( $auth_status ne "ok" ) {
+ exit 0;
+}
+
+my $id = $cgi->param('id');
+
+my $enrollment = Koha::Club::Enrollments->find($id);
+$enrollment->cancel() if $enrollment;
+
+binmode STDOUT, ':encoding(UTF-8)';
+print $cgi->header( -type => 'text/plain', -charset => 'UTF-8' );
+
+print to_json( { success => $enrollment ? 1 : 0 } );
--- /dev/null
+#!/usr/bin/perl
+
+# Copyright 2014 ByWater Solutions
+#
+# 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 2 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.
+#
+# 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.
+#
+
+use Modern::Perl;
+
+use CGI;
+use JSON qw(to_json);
+
+use C4::Auth qw(check_cookie_auth);
+use Koha::Clubs;
+
+my $cgi = new CGI;
+
+my ( $auth_status, $sessionID ) = check_cookie_auth( $cgi->cookie('CGISESSID'), { clubs => 'edit_clubs' } );
+if ( $auth_status ne "ok" ) {
+ exit 0;
+}
+
+my $success = 0;
+
+my $id = $cgi->param('id');
+
+my $club = Koha::Clubs->find($id);
+if ($club) {
+ $success = $club->delete();
+}
+
+binmode STDOUT, ':encoding(UTF-8)';
+print $cgi->header( -type => 'text/plain', -charset => 'UTF-8' );
+
+print to_json( { success => $success ? 1 : 0 } );
--- /dev/null
+#!/usr/bin/perl
+
+# Copyright 2014 ByWater Solutions
+#
+# 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 2 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.
+#
+# 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.
+#
+
+use Modern::Perl;
+
+use CGI;
+use JSON qw(to_json);
+
+use C4::Auth qw(check_cookie_auth);
+use Koha::Club::Enrollment::Fields;
+use Koha::Club::Enrollments;
+use Koha::Clubs;
+
+my $cgi = new CGI;
+
+my ( $auth_status, $sessionID ) =
+ check_cookie_auth( $cgi->cookie('CGISESSID'), { clubs => 'enroll' } );
+if ( $auth_status ne "ok" ) {
+ exit 0;
+}
+
+my $id = $cgi->param('id');
+my $borrowernumber = $cgi->param('borrowernumber');
+
+my $club = Koha::Clubs->find($id);
+
+my $enrollment;
+if ($club) {
+ $enrollment = Koha::Club::Enrollment->new(
+ {
+ club_id => $club->id(),
+ borrowernumber => $borrowernumber,
+ date_enrolled => \'NOW()',
+ date_created => \'NOW()',
+ branchcode => C4::Context->userenv ? C4::Context->userenv->{'branch'} : undef,
+ }
+ )->store();
+
+ if ($enrollment) {
+ my @enrollment_fields = $club->club_template()->club_template_enrollment_fields();
+
+ foreach my $e (@enrollment_fields) {
+ my $club_enrollment_field = Koha::Club::Enrollment::Field->new(
+ {
+ club_enrollment_id => $enrollment->id(),
+ club_template_enrollment_field_id => $e->id(),
+ value => $cgi->param( $e->id() ),
+ }
+ )->store();
+ }
+ }
+}
+
+binmode STDOUT, ':encoding(UTF-8)';
+print $cgi->header( -type => 'text/plain', -charset => 'UTF-8' );
+
+print to_json( { success => $enrollment ? 1 : 0 } );
--- /dev/null
+#!/usr/bin/perl
+
+# Copyright 2014 ByWater Solutions
+#
+# 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 2 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.
+#
+# 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.
+#
+
+use Modern::Perl;
+
+use CGI;
+use JSON qw(to_json);
+
+use C4::Auth qw(check_cookie_auth);
+
+use Koha::Club::Templates;
+
+my $cgi = new CGI;
+
+my ( $auth_status, $sessionID ) = check_cookie_auth( $cgi->cookie('CGISESSID'), { clubs => 'edit_templates' } );
+if ( $auth_status ne "ok" ) {
+ exit 0;
+}
+
+my $success = 0;
+
+my $id = $cgi->param('id');
+
+my $club_template = Koha::Club::Templates->find($id);
+if ($club_template) {
+ $success = $club_template->delete();
+}
+
+binmode STDOUT, ':encoding(UTF-8)';
+print $cgi->header( -type => 'text/plain', -charset => 'UTF-8' );
+
+print to_json( { success => $success ? 1 : 0 } );
--- /dev/null
+#!/usr/bin/perl
+
+# 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 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, see <http://www.gnu.org/licenses>.
+
+use Modern::Perl;
+
+use Test::More tests => 36;
+use Test::Warn;
+
+use C4::Context;
+use Koha::Database;
+use Koha::Patrons;
+
+use t::lib::TestBuilder;
+
+BEGIN {
+ use_ok('Koha::Club');
+ use_ok('Koha::Clubs');
+ use_ok('Koha::Club::Field');
+ use_ok('Koha::Club::Fields');
+ use_ok('Koha::Club::Template');
+ use_ok('Koha::Club::Templates');
+ use_ok('Koha::Club::Template::Field');
+ use_ok('Koha::Club::Template::Fields');
+ use_ok('Koha::Club::Enrollment::Field');
+ use_ok('Koha::Club::Enrollment::Fields');
+ use_ok('Koha::Club::Template::EnrollmentField');
+ use_ok('Koha::Club::Template::EnrollmentFields');
+}
+
+# Start transaction
+my $database = Koha::Database->new();
+my $schema = $database->schema();
+my $dbh = C4::Context->dbh;
+my $builder = t::lib::TestBuilder->new;
+
+$schema->storage->txn_begin();
+$dbh->do("DELETE FROM club_templates");
+
+my $categorycode = $builder->build( { source => 'Category' } )->{categorycode};
+my $branchcode = $builder->build( { source => 'Branch' } )->{branchcode};
+
+my $patron = Koha::Patron->new(
+ {
+ surname => 'Test 1',
+ branchcode => $branchcode,
+ categorycode => $categorycode
+ }
+);
+$patron->store();
+
+my $club_template = Koha::Club::Template->new(
+ {
+ name => "Test Club Template",
+ is_enrollable_from_opac => 0,
+ is_email_required => 0,
+ }
+)->store();
+is( ref($club_template), 'Koha::Club::Template', 'Club template created' );
+
+# Add some template fields
+my $club_template_field_1 = Koha::Club::Template::Field->new(
+ {
+ club_template_id => $club_template->id,
+ name => 'Test Club Template Field 1',
+ }
+)->store();
+is( ref($club_template_field_1),
+ 'Koha::Club::Template::Field', 'Club template field 1 created' );
+
+my $club_template_field_2 = Koha::Club::Template::Field->new(
+ {
+ club_template_id => $club_template->id,
+ name => 'Test Club Template Field 2',
+ }
+)->store();
+is( ref($club_template_field_2),
+ 'Koha::Club::Template::Field', 'Club template field 2 created' );
+
+is( $club_template->club_template_fields->count,
+ 2, 'Club template has two fields' );
+
+## Add some template enrollment fields
+my $club_template_enrollment_field_1 =
+ Koha::Club::Template::EnrollmentField->new(
+ {
+ club_template_id => $club_template->id,
+ name => 'Test Club Template EnrollmentField 1',
+ }
+ )->store();
+is(
+ ref($club_template_enrollment_field_1),
+ 'Koha::Club::Template::EnrollmentField',
+ 'Club template field 1 created'
+);
+
+my $club_template_enrollment_field_2 =
+ Koha::Club::Template::EnrollmentField->new(
+ {
+ club_template_id => $club_template->id,
+ name => 'Test Club Template EnrollmentField 2',
+ }
+ )->store();
+is(
+ ref($club_template_enrollment_field_2),
+ 'Koha::Club::Template::EnrollmentField',
+ 'Club template field 2 created'
+);
+
+is( $club_template->club_template_enrollment_fields->count,
+ 2, 'Club template has two enrollment fields' );
+
+## Create a club based on this template
+my $club = Koha::Club->new(
+ {
+ club_template_id => $club_template->id,
+ name => "Test Club",
+ branchcode => $branchcode,
+ }
+)->store();
+
+my $club_field_1 = Koha::Club::Field->new(
+ {
+ club_template_field_id => $club_template_field_1->id,
+ club_id => $club->id,
+ value => 'TEST',
+ }
+)->store();
+is( ref($club_field_1), 'Koha::Club::Field', 'Club field 1 created' );
+is(
+ $club_field_1->club_template_field->id,
+ $club_template_field_1->id,
+ 'Field 2 is linked to correct template field'
+);
+
+my $club_field_2 = Koha::Club::Field->new(
+ {
+ club_template_field_id => $club_template_field_2->id,
+ club_id => $club->id,
+ value => 'TEST',
+ }
+)->store();
+is( ref($club_field_2), 'Koha::Club::Field', 'Club field 2 created' );
+is(
+ $club_field_2->club_template_field->id,
+ $club_template_field_2->id,
+ 'Field 2 is linked to correct template field'
+);
+
+is( ref($club), 'Koha::Club', 'Club created' );
+is( $club->club_template->id,
+ $club_template->id, 'Club is using correct template' );
+is( $club->branch->id, $branchcode, 'Club is using correct branch' );
+is( $club->club_fields->count, 2, 'Club has correct number of fields' );
+is( Koha::Clubs->get_enrollable( { borrower => $patron } )->count,
+ 1, 'Koha::Clubs->get_enrollable returns 1 enrollable club for patron' );
+is( $patron->get_enrollable_clubs->count,
+ 1, 'There is 1 enrollable club for patron' );
+
+## Create an enrollment for this club
+my $club_enrollment = Koha::Club::Enrollment->new(
+ {
+ club_id => $club->id,
+ borrowernumber => $patron->id,
+ branchcode => $branchcode,
+ }
+)->store();
+is( ref($club_enrollment), 'Koha::Club::Enrollment',
+ 'Club enrollment created' );
+
+my $club_enrollment_field_1 = Koha::Club::Enrollment::Field->new(
+ {
+ club_enrollment_id => $club_enrollment->id,
+ club_template_enrollment_field_id =>
+ $club_template_enrollment_field_1->id,
+ value => 'TEST',
+ }
+)->store();
+is(
+ ref($club_enrollment_field_1),
+ 'Koha::Club::Enrollment::Field',
+ 'Enrollment field 1 created'
+);
+
+my $club_enrollment_field_2 = Koha::Club::Enrollment::Field->new(
+ {
+ club_enrollment_id => $club_enrollment->id,
+ club_template_enrollment_field_id =>
+ $club_template_enrollment_field_2->id,
+ value => 'TEST',
+ }
+)->store();
+is(
+ ref($club_enrollment_field_2),
+ 'Koha::Club::Enrollment::Field',
+ 'Enrollment field 2 created'
+);
+
+is( $club_enrollment->club->id, $club->id, 'Got correct club for enrollment' );
+is( Koha::Clubs->get_enrollable( { borrower => $patron } )->count,
+ 0, 'Koha::Clubs->get_enrollable returns 0 enrollable clubs for patron' );
+is( $patron->get_club_enrollments->count,
+ 1, 'Got 1 club enrollment for patron' );
+is( $patron->get_enrollable_clubs->count,
+ 0, 'No more enrollable clubs for patron' );
+
+$schema->storage->txn_rollback();
+1;