@@ -, +, @@ --- .../maintenance/search_for_data_inconsistencies.pl | 51 +++++++++++++++++++++- 1 file changed, 49 insertions(+), 2 deletions(-) --- a/misc/maintenance/search_for_data_inconsistencies.pl +++ a/misc/maintenance/search_for_data_inconsistencies.pl @@ -17,10 +17,12 @@ use Modern::Perl; -use Koha::Items; +use Koha::AuthorisedValues; +use Koha::Authorities; +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 }}); @@ -107,6 +109,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 =="; --