use C4::Auth;
use C4::Koha;
use C4::Members;
-use C4::Members::Attributes;
-use C4::Members::AttributeTypes qw/GetAttributeTypes_hashref/;
use C4::Output;
use List::MoreUtils qw /any uniq/;
use Koha::DateUtils qw( dt_from_string );
my $patron_list_id = $input->param('patron_list_id');
my @borrowers;
my @cardnumbers;
- my ( @notfoundcardnumbers, @from_another_group_of_libraries );
+ my @notfoundcardnumbers;
# Get cardnumbers from a file or the input area
- my @contentlist;
if ($filefh) {
while ( my $content = <$filefh> ) {
$content =~ s/[\r\n]*$//g;
my $patron = Koha::Patrons->find( { cardnumber => $cardnumber } );
if ( $patron ) {
if ( $logged_in_user->can_see_patron_infos( $patron ) ) {
- $patron = $patron->unblessed;
- $patron->{patron_attributes} = C4::Members::Attributes::GetBorrowerAttributes( $patron->{borrowernumber} );
- $max_nb_attr = scalar( @{ $patron->{patron_attributes} } )
- if scalar( @{ $patron->{patron_attributes} } ) > $max_nb_attr;
- push @borrowers, $patron;
+ my $borrower = $patron->unblessed;
+ my $attributes = $patron->extended_attributes;
+ $borrower->{patron_attributes} = $attributes->as_list;
+ $borrower->{patron_attributes_count} = $attributes->count;
+ $max_nb_attr = $borrower->{patron_attributes_count} if $borrower->{patron_attributes_count} > $max_nb_attr;
+ push @borrowers, $borrower;
} else {
push @notfoundcardnumbers, $cardnumber;
}
# Just for a correct display
for my $borrower ( @borrowers ) {
- my $length = scalar( @{ $borrower->{patron_attributes} } );
+ my $length = $borrower->{patron_attributes_count};
push @{ $borrower->{patron_attributes} }, {} for ( $length .. $max_nb_attr - 1);
}
# Construct the patron attributes list
my @patron_attributes_values;
my @patron_attributes_codes;
- my $patron_attribute_types = C4::Members::AttributeTypes::GetAttributeTypes_hashref('all');
+ my $library_id = C4::Context->userenv ? C4::Context->userenv->{'branch'} : undef;
+ my $patron_attribute_types = Koha::Patron::Attribute::Types->search_with_library_limits({}, {}, $library_id);
my @patron_categories = Koha::Patron::Categories->search_limited({}, {order_by => ['description']});
- for ( values %$patron_attribute_types ) {
- my $attr_type = C4::Members::AttributeTypes->fetch( $_->{code} );
+ while ( my $attr_type = $patron_attribute_types->next ) {
# TODO Repeatable attributes are not correctly managed and can cause data lost.
# This should be implemented.
- next if $attr_type->{repeatable};
- next if $attr_type->{unique_id}; # Don't display patron attributes that must be unqiue
+ next if $attr_type->repeatable;
+ next if $attr_type->unique_id; # Don't display patron attributes that must be unqiue
my $options = $attr_type->authorised_value_category
? GetAuthorisedValues( $attr_type->authorised_value_category )
: undef;
push @patron_attributes_values,
{
- attribute_code => $_->{code},
+ attribute_code => $attr_type->code,
options => $options,
};
- my $category_code = $_->{category_code};
+ my $category_code = $attr_type->category_code;
my ( $category_lib ) = map {
- ( defined $category_code and $_->categorycode eq $category_code ) ? $_->description : ()
+ ( defined $category_code and $attr_type->category_code eq $category_code ) ? $attr_type->description : ()
} @patron_categories;
push @patron_attributes_codes,
{
- attribute_code => $_->{code},
- attribute_lib => $_->{description},
+ attribute_code => $attr_type->code,
+ attribute_lib => $attr_type->description,
category_lib => $category_lib,
type => $attr_type->authorised_value_category ? 'select' : 'text',
};
}
}
- my $borrower_categorycode = Koha::Patrons->find( $borrowernumber )->categorycode;
+ my $patron = Koha::Patrons->find( $borrowernumber );
my $i=0;
for ( @attributes ) {
next unless $_;
my $attribute;
$attribute->{code} = $_;
$attribute->{attribute} = $attr_values[$i];
- my $attr_type = C4::Members::AttributeTypes->fetch( $_ );
+ my $attr_type = Koha::Patron::Attribute::Types->find($_);
# If this borrower is not in the category of this attribute, we don't want to modify this attribute
- ++$i and next if $attr_type->{category_code} and $attr_type->{category_code} ne $borrower_categorycode;
+ ++$i and next if $attr_type->category_code and $attr_type->category_code ne $patron->categorycode;
my $valuename = "attr" . $i . "_value";
if ( grep { $_ eq $valuename } @disabled ) {
# The attribute is disabled, we remove it for this borrower !
eval {
- C4::Members::Attributes::DeleteBorrowerAttribute( $borrowernumber, $attribute );
+ $patron->get_extended_attribute($attribute->{code})->delete;
};
push @errors, { error => $@ } if $@;
} else {
eval {
- C4::Members::Attributes::UpdateBorrowerAttribute( $borrowernumber, $attribute );
+ # Note:
+ # We should not need to filter by branch, but stay on the safe side
+ # Repeatable are not supported so we can do that - TODO
+ $patron->extended_attributes->search({'me.code' => $attribute->{code}})->filter_by_branch_limitations->delete;
+ $patron->add_extended_attribute($attribute);
};
push @errors, { error => $@ } if $@;
}
for my $borrowernumber ( @borrowernumbers ) {
my $patron = Koha::Patrons->find( $borrowernumber );
if ( $patron ) {
- $patron = $patron->unblessed;
- $patron->{patron_attributes} = C4::Members::Attributes::GetBorrowerAttributes( $patron->{borrowernumber} );
- $max_nb_attr = scalar( @{ $patron->{patron_attributes} } )
- if scalar( @{ $patron->{patron_attributes} } ) > $max_nb_attr;
- push @borrowers, $patron;
+ my $category_description = $patron->category->description;
+ my $borrower = $patron->unblessed;
+ $borrower->{category_description} = $category_description;
+ my $attributes = $patron->extended_attributes;
+ $borrower->{patron_attributes} = $attributes->as_list;
+ $max_nb_attr = $attributes->count if $attributes->count > $max_nb_attr;
+ push @borrowers, $borrower;
}
}
my @patron_attributes_option;