Bug 13757: (followup) Only touch opac_editable attributes

As reported by Owen, the members-update.pl was showing every attributes
the patron has (display issue) instead of showing only those affected by
the changes.

This patch fixes this by filtering the patron's attributes by opac
editability.

It also fixes Koha::Patron::Modification->approve so it only clears the
attributes with the updating 'code' and leaves the others untouched.
As its been coded so far (until someone refactors it all) the
Koha::Patron::Modification object needs to contain all the attributes
for a specific code. And it comes from parsing the UI's input.

Tests for Koha::Patron::Modification->approve to come.

Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>

Signed-off-by: Nick Clemens <nick@bywatersolutions.com>

Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org>

Signed-off-by: Kyle M Hall <kyle@bywatersolutions.com>
This commit is contained in:
Tomas Cohen Arazi 2016-12-23 16:19:06 -03:00 committed by Kyle M Hall
parent 925e664f42
commit c8889f0ff7
2 changed files with 26 additions and 14 deletions

View File

@ -23,11 +23,12 @@ use Carp;
use Koha::Database;
use Koha::Exceptions::Patron::Modification;
use Koha::Patron::Attribute;
use Koha::Patron::Attributes;
use Koha::Patron::Modifications;
# TODO: Remove once Koha::Patron::Attribute(s) is implemented
use C4::Members::Attributes qw( SetBorrowerAttributes );
use JSON;
use List::MoreUtils qw( uniq );
use Try::Tiny;
use base qw(Koha::Object);
@ -87,6 +88,7 @@ sub approve {
my ($self) = @_;
my $data = $self->unblessed();
my $extended_attributes;
delete $data->{timestamp};
delete $data->{verification_token};
@ -104,7 +106,7 @@ sub approve {
# Take care of extended attributes
if ( $self->extended_attributes ) {
our $extended_attributes
$extended_attributes
= try { decode_json( $self->extended_attributes ) }
catch {
Koha::Exceptions::Patron::Modification::InvalidData->throw(
@ -117,12 +119,23 @@ sub approve {
try {
$patron->store();
# Take care of extended attributes
if ( $self->extended_attributes ) {
my $extended_attributes
= decode_json( $self->extended_attributes );
SetBorrowerAttributes( $patron->borrowernumber,
$extended_attributes );
# Deal with attributes
my @codes
= uniq( map { $_->{code} } @{$extended_attributes} );
foreach my $code (@codes) {
map { $_->delete } Koha::Patron::Attributes->search(
{ borrowernumber => $patron->borrowernumber,
code => $code
}
);
}
foreach my $attr ( @{$extended_attributes} ) {
Koha::Patron::Attribute->new(
{ borrowernumber => $patron->borrowernumber,
code => $attr->{code},
attribute => $attr->{value}
}
)->store;
}
}
catch {
@ -141,8 +154,6 @@ sub approve {
}
=head3 type
=cut

View File

@ -24,7 +24,6 @@ use C4::Auth;
use C4::Output;
use C4::Context;
use C4::Members;
use C4::Members::Attributes qw( GetBorrowerAttributes );
use Koha::Patron::Attributes;
use Koha::Patron::Modifications;
@ -55,10 +54,12 @@ my $borrowers;
foreach my $pm (@$pending_modifications) {
$borrowers->{ $pm->{borrowernumber} }
= GetMember( borrowernumber => $pm->{borrowernumber} );
my $patron_attributes = Koha::Patron::Attributes->search(
my @patron_attributes
= grep { $_->opac_editable }
Koha::Patron::Attributes->search(
{ borrowernumber => $pm->{borrowernumber} } );
$borrowers->{ $pm->{'borrowernumber'} }->{extended_attributes}
= $patron_attributes;
= \@patron_attributes;
}
$template->param(