Koha-Contrib-Sudoc

 view release on metacpan or  search on metacpan

lib/Koha/Contrib/Sudoc/Loader/Biblios.pm  view on Meta::CPAN

package Koha::Contrib::Sudoc::Loader::Biblios;
# ABSTRACT: Chargeur de notices biblio
$Koha::Contrib::Sudoc::Loader::Biblios::VERSION = '2.49';
use Moose;

extends 'Koha::Contrib::Sudoc::Loader';

use Modern::Perl;
use utf8;
use YAML;
use C4::Biblio qw/ ModBiblio ModBiblioMarc AddBiblio /;
use C4::Items qw/ AddItemBatchFromMarc /;



# On cherche les notices doublons SUDOC. On renvoie la liste des notices
# Koha correspondantes.
sub doublons_sudoc {
    my ($self, $record) = @_;
    my @doublons;
    # On cherche un 035 avec $9 sudoc qui indique une fusion de notices Sudoc 035$a
    # contient le PPN de la notice qui a été fusionnée avec la notice en cours de
    # traitement.
    for my $field ( $record->field('035') ) {
        my $sudoc = $field->subfield('9');
        next unless $sudoc && $sudoc =~ /sudoc/i;
        my $ppn = $field->subfield('a');
        my ($biblionumber, $framework, $koha_record) =
            $self->sudoc->koha->get_biblio_by_ppn( $ppn );
        if ($koha_record) {
            $self->log->notice("  Fusion Sudoc du ppn $ppn avec le biblionumber $biblionumber\n");
            push @doublons, {
                ppn          => $ppn,
                record       => $koha_record,
                biblionumber => $biblionumber,
                framework    => $framework,
            };
        }
    } 
    return \@doublons;
}


sub handle_record {
    my ($self, $record) = @_;

    # FIXME Reset de la connexion tous les x enregistrements
    $self->sudoc->koha->zconn_reset()  unless $self->count % 10;

    my $ppn = $record->field('001')->value;
    $self->log->notice("Notice #" . $self->count . " ppn $ppn\n");
    $self->log->debug( $self->sudoc->record_as_text($record) );

    # On déplace le PPN
    $self->sudoc->ppn_move($record, $self->sudoc->c->{biblio}->{ppn_move});

    $self->converter->build($record);

    # Est-ce qu'il faut passer la notice ?
    if ( $self->converter->skip($record) ) {
        $record = undef;
        $self->count_skipped( $self->count_skipped + 1 );
        $self->log->notice( "  * Ignorée\n" );
        return;
    }

    # On cherche si la notice entrante ne se trouve pas déjà dans le
    # catalogue Koha.



( run in 0.593 second using v1.01-cache-2.11-cpan-524268b4103 )