From 4e8ecf0d3dbd3dc1bc58a42586abe72b26395c8d Mon Sep 17 00:00:00 2001 From: Jonathan Druart Date: Tue, 5 Mar 2019 17:04:45 -0300 Subject: [PATCH] Bug 21466: Catch any values that should be defined in the AV but are not Let's expand the idea of the first patch to catch the wrong values for any others AV. Signed-off-by: Martin Renvoize --- .../search_for_data_inconsistencies.pl | 50 +++++++++++-------- 1 file changed, 30 insertions(+), 20 deletions(-) diff --git a/misc/maintenance/search_for_data_inconsistencies.pl b/misc/maintenance/search_for_data_inconsistencies.pl index db8339827d..2c7b3c9e3f 100755 --- a/misc/maintenance/search_for_data_inconsistencies.pl +++ b/misc/maintenance/search_for_data_inconsistencies.pl @@ -127,41 +127,51 @@ use Koha::ItemTypes; my $frameworks = Koha::BiblioFrameworks->search; my $invalid_locations_per_framework; while ( my $framework = $frameworks->next ) { - my $avs = Koha::AuthorisedValues->search_by_koha_field( - { - frameworkcode => $framework->frameworkcode, - kohafield => 'items.location' + my $msss = Koha::MarcSubfieldStructures->search({ frameworkcode => $framework->frameworkcode, authorised_value => { '!=' => [ -and => ( undef, '' ) ]} }); + while ( my $mss = $msss->next ) { + my $kohafield = $mss->kohafield; + next if grep {/$kohafield/} qw( branches itemtypes cn_source ); # internal categories + my $avs = Koha::AuthorisedValues->search_by_koha_field( + { + frameworkcode => $framework->frameworkcode, + kohafield => $kohafield, + } + ); + (my $tmp_kohafield = $kohafield) =~ s|items|me|; # replace items.attr with me.attr + my $items = Koha::Items->search( + { + $tmp_kohafield => + { -not_in => [ $avs->get_column('authorised_value') ] }, + 'biblio.frameworkcode' => $framework->frameworkcode + }, + { join => [ 'biblioitem', 'biblio' ] } + ); + if ( $items->count ) { + $invalid_locations_per_framework->{ $framework->frameworkcode } = + { items => $items, av_category => $mss->authorised_value, kohafield => $kohafield }; } - ); - my $items = Koha::Items->search( - { - location => - { -not_in => [ $avs->get_column('authorised_value') ] }, - 'biblio.frameworkcode' => $framework->frameworkcode - }, - { join => [ 'biblioitem', 'biblio' ] } - ); - if ( $items->count ) { - $invalid_locations_per_framework->{ $framework->frameworkcode } = - { items => $items, av_category => $avs->next->category, }; } } if (%$invalid_locations_per_framework) { - new_section('Wrong value dor items.location'); + new_section('Wrong values linked to authorised values'); for my $frameworkcode ( keys %$invalid_locations_per_framework ) { my $output; my $items = $invalid_locations_per_framework->{$frameworkcode}->{items}; my $av_category = $invalid_locations_per_framework->{$frameworkcode}->{av_category}; + my $kohafield = + $invalid_locations_per_framework->{$frameworkcode}->{kohafield}; + my ( $table, $column ) = split '\.', $kohafield; while ( my $i = $items->next ) { - $output .= " {" . $i->itemnumber . " => " . $i->location . "}"; + my $value = $table eq 'items' ? $i->$column : $i->biblioitem->$column; + $output .= " {" . $i->itemnumber . " => " . $value . "}"; } new_item( sprintf( "The Framework *%s* is using the authorised value's category *%s*, " - . "but the following items.location do not have a value defined ({itemnumber => value }):\n%s", - $frameworkcode, $av_category, $output + . "but the following %s do not have a value defined ({itemnumber => value }):\n%s", + $frameworkcode, $av_category, $kohafield, $output ) ); } -- 2.39.5