@@ -, +, @@ --- Koha/PatronCategories.pm | 50 +++++++++++++ Koha/PatronCategory.pm | 188 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 238 insertions(+) create mode 100644 Koha/PatronCategories.pm create mode 100644 Koha/PatronCategory.pm --- a/Koha/PatronCategories.pm +++ a/Koha/PatronCategories.pm @@ -0,0 +1,50 @@ +package Koha::PatronCategories; + +# 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::PatronCategory; + +use base qw(Koha::Objects); + +=head1 NAME + +Koha::PatronCategories - Koha PatronCategory Object set class + +=head1 API + +=head2 Class Methods + +=cut + +=head3 type + +=cut + +sub type { + return 'Category'; +} + +sub object_class { + return 'Koha::PatronCategory'; +} + +1; --- a/Koha/PatronCategory.pm +++ a/Koha/PatronCategory.pm @@ -0,0 +1,188 @@ +package Koha::PatronCategory; + +# 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 C4::Members::Messaging; + +use Koha::Database; + +use base qw(Koha::Object); + +=head1 NAME + +Koha::PatronCategory - Koha PatronCategory Object class + +=head1 API + +=head2 Class Methods + +=cut + +=head3 default_messaging + +my $messaging = $category->default_messaging(); + +=cut + +sub default_messaging { + my ( $self ) = @_; + my $messaging_options = C4::Members::Messaging::GetMessagingOptions(); + my @messaging; + foreach my $option (@$messaging_options) { + my $pref = C4::Members::Messaging::GetMessagingPreferences( + { + categorycode => $self->categorycode, + message_name => $option->{message_name} + } + ); + next unless $pref->{transports}; + my $brief_pref = { + message_attribute_id => $option->{message_attribute_id}, + message_name => $option->{message_name}, + $option->{'message_name'} => 1, + }; + foreach my $transport ( keys %{ $pref->{transports} } ) { + push @{ $brief_pref->{transports} }, { transport => $transport }; + } + push @messaging, $brief_pref; + } + return \@messaging; +} + +=head3 branch_limitations + +my $limitations = $category->branch_limitations(); + +$category->branch_limitations( \@branchcodes ); + +=cut + +sub branch_limitations { + my ( $self, $branchcodes ) = @_; + + if ($branchcodes) { + return $self->replace_branch_limitations($branchcodes); + } + else { + return $self->get_branch_limitations(); + } + +} + +=head3 get_branch_limitations + +my $limitations = $category->get_branch_limitations(); + +=cut + +sub get_branch_limitations { + my ($self) = @_; + + my @branchcodes = + $self->_catb_resultset->search( { categorycode => $self->categorycode } ) + ->get_column('branchcode')->all(); + + return \@branchcodes; +} + +=head3 add_branch_limitation + +$category->add_branch_limitation( $branchcode ); + +=cut + +sub add_branch_limitation { + my ( $self, $branchcode ) = @_; + + croak("No branchcode passed in!") unless $branchcode; + + my $limitation = $self->_catb_resultset->update_or_create( + { categorycode => $self->categorycode, branchcode => $branchcode } ); + + return $limitation ? 1 : undef; +} + +=head3 del_branch_limitation + +$category->del_branch_limitation( $branchcode ); + +=cut + +sub del_branch_limitation { + my ( $self, $branchcode ) = @_; + + croak("No branchcode passed in!") unless $branchcode; + + my $limitation = + $self->_catb_resultset->find( + { categorycode => $self->categorycode, branchcode => $branchcode } ); + + unless ($limitation) { + my $categorycode = $self->categorycode; + carp( +"No branch limit for branch $branchcode found for categorycode $categorycode to delete!" + ); + return; + } + + return $limitation->delete(); +} + +=head3 replace_branch_limitations + +$category->replace_branch_limitations( \@branchcodes ); + +=cut + +sub replace_branch_limitations { + my ( $self, $branchcodes ) = @_; + + $self->_catb_resultset->search( { categorycode => $self->categorycode } )->delete; + + my @return_values = + map { $self->add_branch_limitation($_) } @$branchcodes; + + return \@return_values; +} + +=head3 Koha::Objects->_catb_resultset + +Returns the internal resultset or creates it if undefined + +=cut + +sub _catb_resultset { + my ($self) = @_; + + $self->{_catb_resultset} ||= + Koha::Database->new->schema->resultset('CategoriesBranch'); + + return $self->{_catb_resultset}; +} + +=head3 type + +=cut + +sub type { + return 'Category'; +} + +1; --