=head2 AddItemFromMarc
my ($biblionumber, $biblioitemnumber, $itemnumber)
- = AddItemFromMarc($source_item_marc, $biblionumber);
+ = AddItemFromMarc($source_item_marc, $biblionumber[, $params]);
Given a MARC::Record object containing an embedded item
record and a biblionumber, create a new item record.
+The final optional parameter, C<$params>, expected to contain
+'skip_modzebra_update' key, which relayed down to Koha::Item/store,
+there it prevents calling of ModZebra (and Elasticsearch update),
+which takes most of the time in batch adds/deletes: ModZebra better
+to be called later in C<additem.pl> after the whole loop.
+
+$params:
+ skip_modzebra_update => true / false
=cut
sub AddItemFromMarc {
- my ( $source_item_marc, $biblionumber ) = @_;
+ my $source_item_marc = shift;
+ my $biblionumber = shift;
+ my $params = @_ ? shift : {};
+
my $dbh = C4::Context->dbh;
# parse item hash from MARC
$item_values->{biblionumber} = $biblionumber;
$item_values->{cn_source} = delete $item_values->{'items.cn_source'}; # Because of C4::Biblio::_disambiguate
$item_values->{cn_sort} = delete $item_values->{'items.cn_sort'}; # Because of C4::Biblio::_disambiguate
- my $item = Koha::Item->new( $item_values )->store;
+ my $item = Koha::Item->new( $item_values )->store({ skip_modzebra_update => $params->{skip_modzebra_update} });
return ( $item->biblionumber, $item->biblioitemnumber, $item->itemnumber );
}
=cut
sub store {
- my ($self, $params) = @_;
+ my $self = shift;
+ my $params = @_ ? shift : {};
my $log_action = $params->{log_action} // 1;
$self->cn_sort($cn_sort);
}
- C4::Biblio::ModZebra( $self->biblionumber, "specialUpdate", "biblioserver" );
+ C4::Biblio::ModZebra( $self->biblionumber, "specialUpdate", "biblioserver" )
+ unless $params->{skip_modzebra_update};
logaction( "CATALOGUING", "ADD", $self->itemnumber, "item" )
if $log_action && C4::Context->preference("CataloguingLog");
$self->permanent_location( $self->location );
}
- C4::Biblio::ModZebra( $self->biblionumber, "specialUpdate", "biblioserver" );
+ C4::Biblio::ModZebra( $self->biblionumber, "specialUpdate", "biblioserver" )
+ unless $params->{skip_modzebra_update};
$self->_after_item_action_hooks({ action => 'modify' });
=cut
sub delete {
- my ( $self ) = @_;
+ my $self = shift;
+ my $params = @_ ? shift : {};
# FIXME check the item has no current issues
# i.e. raise the appropriate exception
- C4::Biblio::ModZebra( $self->biblionumber, "specialUpdate", "biblioserver" );
+ C4::Biblio::ModZebra( $self->biblionumber, "specialUpdate", "biblioserver" )
+ unless $params->{skip_modzebra_update};
$self->_after_item_action_hooks({ action => 'delete' });
=cut
sub safe_delete {
- my ($self) = @_;
+ my $self = shift;
+ my $params = @_ ? shift : {};
my $safe_to_delete = $self->safe_to_delete;
return $safe_to_delete unless $safe_to_delete eq '1';
$self->move_to_deleted;
- return $self->delete;
+ return $self->delete($params);
}
=head3 safe_to_delete
# Adding the item
if (!$exist_itemnumber) {
- my ($oldbiblionumber,$oldbibnum,$oldbibitemnum) = AddItemFromMarc($record,$biblionumber);
+ my ( $oldbiblionumber, $oldbibnum, $oldbibitemnum ) =
+ AddItemFromMarc( $record, $biblionumber, { skip_modzebra_update => 1 } );
set_item_default_location($oldbibitemnum);
# We count the item only if it was really added
# Preparing the next iteration
$oldbarcode = $barcodevalue;
}
+
+ C4::Biblio::ModZebra( $biblionumber, "specialUpdate", "biblioserver" );
+
undef($itemrecord);
}
}
#-------------------------------------------------------------------------------
my $items = Koha::Items->search({ biblionumber => $biblionumber });
while ( my $item = $items->next ) {
- $error = $item->safe_delete;
+ $error = $item->safe_delete({ skip_modzebra_update => 1 });
next if $error eq '1'; # Means ok
push @errors,$error;
}
+ C4::Biblio::ModZebra( $biblionumber, "specialUpdate", "biblioserver" );
if ( @errors ) {
$nextop="additem";
} else {