From e48d396002588d7d6c16ec7d72bcc32227eae6ee Mon Sep 17 00:00:00 2001 From: Jonathan Druart Date: Wed, 17 Oct 2018 15:08:58 -0300 Subject: [PATCH] Bug 21466: Search for items.location inconsistencies Signed-off-by: Martin Renvoize --- .../search_for_data_inconsistencies.pl | 51 ++++++++++++++++++- 1 file changed, 49 insertions(+), 2 deletions(-) diff --git a/misc/maintenance/search_for_data_inconsistencies.pl b/misc/maintenance/search_for_data_inconsistencies.pl index 02f66f21d3..db8339827d 100755 --- a/misc/maintenance/search_for_data_inconsistencies.pl +++ b/misc/maintenance/search_for_data_inconsistencies.pl @@ -18,11 +18,13 @@ use Modern::Perl; use Koha::Script; -use Koha::Items; +use Koha::AuthorisedValues; +use Koha::Authorities; use Koha::Biblios; +use Koha::BiblioFrameworks; use Koha::Biblioitems; +use Koha::Items; use Koha::ItemTypes; -use Koha::Authorities; { my $items = Koha::Items->search({ -or => { homebranch => undef, holdingbranch => undef }}); @@ -121,6 +123,51 @@ use Koha::Authorities; } } +{ + 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 $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'); + 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}; + while ( my $i = $items->next ) { + $output .= " {" . $i->itemnumber . " => " . $i->location . "}"; + } + 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 + ) + ); + } + } +} + sub new_section { my ( $name ) = @_; say "\n== $name =="; -- 2.39.5