Koha-Contrib-Mirabel
view release on metacpan or search on metacpan
lib/Koha/Contrib/Mirabel.pm view on Meta::CPAN
use Modern::Perl;
use utf8;
use FindBin qw($Bin);
use List::Util qw/first/;
use YAML qw/LoadFile Dump/;
use XML::Simple;
use LWP::Simple;
use DateTime;
use C4::Biblio;
use MARC::Moose::Record;
use MARC::Moose::Field::Std;
has url => (
is => 'rw',
isa => 'Str',
default => 'https://reseau-mirabel.info/site/service?',
);
has partenaire => ( is => 'rw', isa => 'Int' );
has tag => ( is => 'rw', isa => 'Str' );
has verbose => ( is => 'rw', isa => 'Bool', default => 1 );
has doit => ( is => 'rw', isa => 'Bool', default => 0 );
sub BUILD {
my $self = shift;
my $partenaire = C4::Context->preference('MirabelPartenaire');
die "Il manque la préférence MirabelPartenaire" unless $partenaire;
$self->partenaire($partenaire);
my $tag = C4::Context->preference('MirabelTag');
die "Il manque la préférence MirabelTag" unless $tag;
$self->tag($tag);
}
sub get_biblio {
my ($self, $biblionumber) = @_;
my $record = GetMarcBiblio( { biblionumber => $biblionumber } );
return unless $record;
return MARC::Moose::Record::new_from($record, 'Legacy');
}
sub update {
my ($self, $biblionumber, $services) = @_;
say '_' x 40, " #$biblionumber" if $self->verbose;
my $record = $self->get_biblio($biblionumber);
unless ($record) {
say 'ERREUR: Notice présente dans Mir@bel mais supprimée du Catalogue Koha'
if $self->verbose;
return;
}
print $record->as('Text') if $self->verbose;
# On supprime de la notice biblio les champs cibles existants
$record->delete( $self->tag );
for my $service (@$services) {
say "Mir\@bel #", $service->{id}, "\n",
join("\n",
map { " $_: " . $service->{$_} } grep { $_ ne 'id' }
keys %$service )
if $self->verbose;
my @sf = (
[ 3 => $service->{id} ],
[ 4 => $service->{type} ],
[ a => $service->{urldirecte} || $service->{urlservice} ],
[ b => $service->{nom} ],
);
if (my $value = $service->{acces}) { push @sf, [ c => $value ]; }
my @coll;
push @coll, $service->{debut} if $service->{debut};
push @coll, '-';
push @coll, $service->{fin} if $service->{fin};
push @sf, [ d => join('', @coll) ] if @coll > 1;
if (my $value = $service->{couverture}) { push @sf, [ e => $value ]; }
if (my $value = $service->{lacunaire}) { push @sf, [ f => $value ]; }
$record->append( MARC::Moose::Field::Std->new(
tag => $self->tag, subf => \@sf ) );
}
print "\nAPRÃS:\n", $record->as('Text') if $self->verbose;
# On réécrit la notice
if ( $self->doit ) {
$record = $record->as('Legacy');
ModBiblioMarc( $record, $biblionumber, GetFrameworkCode($biblionumber) );
}
}
sub sync {
my $self = shift;
if ($self->verbose) {
say "Synchro";
say "** TEST **" unless $self->doit;
}
my $url = $self->url . 'partenaire=' . $self->partenaire;
( run in 0.830 second using v1.01-cache-2.11-cpan-bbe5e583499 )