111 lines
3.1 KiB
Perl
111 lines
3.1 KiB
Perl
package Koha::Policy::Patrons::Cardnumber;
|
|
|
|
# Copyright 2023 Koha Development team
|
|
#
|
|
# 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 C4::Context;
|
|
|
|
use Koha::Patrons;
|
|
use Koha::Result::Boolean;
|
|
|
|
=head1 NAME
|
|
|
|
Koha::Policy::Patrons::Cardnumber - module to deal with cardnumbers policy
|
|
|
|
=head1 API
|
|
|
|
=head2 Class Methods
|
|
|
|
=head3 new
|
|
|
|
=cut
|
|
|
|
sub new {
|
|
return bless {}, shift;
|
|
}
|
|
|
|
=head3 is_valid
|
|
|
|
my $is_valid = Koha::Policy::Patrons::Cardnumber->is_valid( $cardnumber, [$patron] );
|
|
|
|
Returns whether a cardnumber is valid of not for a given I<Koha::Patron> object.
|
|
|
|
=cut
|
|
|
|
sub is_valid {
|
|
my ( $class, $cardnumber, $patron ) = @_;
|
|
|
|
return Koha::Result::Boolean->new(1)
|
|
unless defined $cardnumber;
|
|
|
|
return Koha::Result::Boolean->new(0)->add_message( { message => "already_exists" } )
|
|
if Koha::Patrons->search(
|
|
{
|
|
cardnumber => $cardnumber,
|
|
( $patron ? ( borrowernumber => { '!=' => $patron->borrowernumber } ) : () )
|
|
}
|
|
)->count;
|
|
|
|
my ( $min_length, $max_length ) = $class->get_valid_length();
|
|
return Koha::Result::Boolean->new(0)->add_message( { message => "invalid_length" } )
|
|
if length $cardnumber > $max_length
|
|
or length $cardnumber < $min_length;
|
|
|
|
return Koha::Result::Boolean->new(1);
|
|
}
|
|
|
|
=head2 get_valid_length
|
|
|
|
my ($min, $max) = Koha::Policy::Patrons::Cardnumber::get_valid_length();
|
|
|
|
Returns the minimum and maximum length for patron cardnumbers as
|
|
determined by the CardnumberLength system preference, the
|
|
BorrowerMandatoryField system preference, and the width of the
|
|
database column.
|
|
|
|
=cut
|
|
|
|
sub get_valid_length {
|
|
my ($class) = @_;
|
|
my $borrower = Koha::Database->new->schema->resultset('Borrower');
|
|
my $field_size = $borrower->result_source->column_info('cardnumber')->{size};
|
|
my ( $min, $max ) = ( 0, $field_size );
|
|
$min = 1 if C4::Context->preference('BorrowerMandatoryField') =~ /cardnumber/;
|
|
if ( my $cardnumber_length = C4::Context->preference('CardnumberLength') ) {
|
|
|
|
# Is integer and length match
|
|
if ( $cardnumber_length =~ m|^\d+$| ) {
|
|
$min = $max = $cardnumber_length
|
|
if $cardnumber_length >= $min
|
|
and $cardnumber_length <= $max;
|
|
}
|
|
|
|
# Else assuming it is a range
|
|
elsif ( $cardnumber_length =~ m|(\d*),(\d*)| ) {
|
|
$min = $1 if $1 and $min < $1;
|
|
$max = $2 if $2 and $max > $2;
|
|
}
|
|
|
|
}
|
|
$min = $max if $min > $max;
|
|
return ( $min, $max );
|
|
}
|
|
|
|
1;
|