$Koha::Contrib::Tamil::Authority::EditorsBuilder::VERSION
=
'0.074'
;
use
5.010;
has
verbose
=> (
is
=>
'rw'
,
isa
=>
'Bool'
);
has
koha
=> (
is
=>
'rw'
,
isa
=>
'Koha::Contrib::Tamil::Koha'
);
has
editor_from_isbn
=> (
is
=>
'rw'
,
isa
=>
'HashRef'
,
default
=>
sub
{ {} } );
has
editor_without_isbn
=> (
is
=>
'rw'
,
isa
=>
'HashRef'
,
default
=>
sub
{ {} } );
has
editor_with_invalid_isbn
=> (
is
=>
'rw'
,
isa
=>
'HashRef'
,
default
=>
sub
{ {} } );
has
biblionumbers
=> (
is
=>
'rw'
,
isa
=>
'ArrayRef'
);
before
'run'
=>
sub
{
my
(
$self
,
$delete
) =
@_
;
my
$sth
=
$self
->koha->dbh->prepare(
"SELECT biblionumber
FROM biblioitems
");
$sth
->execute;
my
@biblionumbers
= ();
while
(
my
(
$biblionumber
) =
$sth
->fetchrow) {
push
@biblionumbers
,
$biblionumber
;
}
$self
->biblionumbers( \
@biblionumbers
);
say
"Step 1: Extracting isbn-editors-collections from biblio records"
if
$self
->verbose;
};
override
'process'
=>
sub
{
my
$self
=
shift
;
if
(
$self
->count == @{
$self
->biblionumbers} ) {
my
%found
;
for
my
$isbn
(
keys
%{
$self
->editor_from_isbn } ) {
my
$editor
=
$self
->editor_from_isbn->{
$isbn
};
my
$name
=
$editor
->[0];
$found
{
$name
} = 1;
}
for
(
keys
%{
$self
->editor_without_isbn } ) {
delete
$self
->editor_without_isbn->{
$_
}
if
$found
{
$_
};
}
for
(
keys
%{
$self
->editor_with_invalid_isbn } ) {
delete
$self
->editor_with_invalid_isbn->{
$_
}
if
$found
{
$_
};
}
return
0;
}
my
$biblionumber
=
$self
->biblionumbers->[
$self
->count];
$self
->SUPER::process();
my
$record
= GetMarcBiblio(
$biblionumber
);
return
1
unless
$record
;
my
$name
=
$record
->field(
'210'
);
return
1
unless
$name
;
$name
=
$name
->subfield(
'c'
);
return
1
unless
$name
;
my
$isbn
=
$record
->field(
'010'
);
unless
(
$isbn
) {
$self
->editor_without_isbn->{
$name
} = 1;
return
1;
}
$isbn
=
$isbn
->subfield(
'a'
);
unless
(
$isbn
) {
$self
->editor_without_isbn->{
$name
} = 1;
return
1;
}
$isbn
= Business::ISBN->new(
$isbn
);
unless
(
$isbn
) {
$self
->editor_with_invalid_isbn->{
$name
} = 1;
return
1;
}
unless
(
$isbn
->is_valid ) {
$self
->editor_with_invalid_isbn->{
$name
} = 1;
return
1;
}
my
$isbn_prefix
=
$isbn
->group_code .
'-'
.
$isbn
->publisher_code;
return
1
unless
$isbn_prefix
;
my
$collection
=
$record
->field(
'225'
);
$collection
=
$collection
?
$collection
->subfield(
'a'
) ||
'_SANS_COLLECTION_'
:
'_SANS_COLLECTION'
;
my
$editor
=
$self
->editor_from_isbn->{
$isbn_prefix
} ||
(
$self
->editor_from_isbn->{
$isbn_prefix
} = [
$name
, {}, ] );
$editor
->[1]->{
$collection
}++;
return
1;
};
override
'process_message'
=>
sub
{
my
$self
=
shift
;
my
$total
= @{
$self
->biblionumbers } + 0;
my
$percent
=
$self
->count * 100 /
$total
;
print
sprintf
(
" %#6d / %d (%d"
,
$self
->count,
$total
,
$percent
) .
"%)\n"
;
};
no
Moose;
__PACKAGE__->meta->make_immutable;
1;