View | Details | Raw Unified | Return to bug 27421
Collapse All | Expand All

(-)a/C4/Biblio.pm (-6 / +4 lines)
Lines 202-216 unless you can guarantee that C<ModBiblioMarc> will be called. Link Here
202
sub AddBiblio {
202
sub AddBiblio {
203
    my $record          = shift;
203
    my $record          = shift;
204
    my $frameworkcode   = shift;
204
    my $frameworkcode   = shift;
205
    my $options         = @_ ? shift : undef;
205
    my $options         = @_ ? shift : {};
206
    my $defer_marc_save = 0;
207
    if (!$record) {
206
    if (!$record) {
208
        carp('AddBiblio called with undefined record');
207
        carp('AddBiblio called with undefined record');
209
        return;
208
        return;
210
    }
209
    }
211
    if ( defined $options and exists $options->{'defer_marc_save'} and $options->{'defer_marc_save'} ) {
210
    my $defer_marc_save    = $options->{defer_marc_save} || 0;
212
        $defer_marc_save = 1;
211
    my $skip_record_index  = $options->{skip_record_index} || 0;
213
    }
214
212
215
    my $schema = Koha::Database->schema;
213
    my $schema = Koha::Database->schema;
216
    my ( $biblionumber, $biblioitemnumber );
214
    my ( $biblionumber, $biblioitemnumber );
Lines 291-297 sub AddBiblio { Link Here
291
            }
289
            }
292
290
293
            # now add the record
291
            # now add the record
294
            ModBiblioMarc( $record, $biblionumber ) unless $defer_marc_save;
292
            ModBiblioMarc( $record, $biblionumber, { skip_record_index => $skip_record_index } ) unless $defer_marc_save;
295
293
296
            # update OAI-PMH sets
294
            # update OAI-PMH sets
297
            if(C4::Context->preference("OAI-PMH:AutoUpdateSets")) {
295
            if(C4::Context->preference("OAI-PMH:AutoUpdateSets")) {
(-)a/C4/ImportBatch.pm (-9 / +32 lines)
Lines 35-40 use C4::Charset qw( MarcToUTF8Record SetUTF8Flag StripNonXmlChars ); Link Here
35
use C4::AuthoritiesMarc qw( AddAuthority GuessAuthTypeCode GetAuthorityXML ModAuthority DelAuthority );
35
use C4::AuthoritiesMarc qw( AddAuthority GuessAuthTypeCode GetAuthorityXML ModAuthority DelAuthority );
36
use C4::MarcModificationTemplates qw( ModifyRecordWithTemplate );
36
use C4::MarcModificationTemplates qw( ModifyRecordWithTemplate );
37
use Koha::Items;
37
use Koha::Items;
38
use Koha::SearchEngine;
39
use Koha::SearchEngine::Indexer;
38
use Koha::Plugins::Handler;
40
use Koha::Plugins::Handler;
39
use Koha::Logger;
41
use Koha::Logger;
40
42
Lines 582-587 sub BatchCommitRecords { Link Here
582
    my $logged_in_patron = Koha::Patrons->find( $userenv->{number} );
584
    my $logged_in_patron = Koha::Patrons->find( $userenv->{number} );
583
585
584
    my $rec_num = 0;
586
    my $rec_num = 0;
587
    my @biblionumbers;
585
    while (my $rowref = $sth->fetchrow_hashref) {
588
    while (my $rowref = $sth->fetchrow_hashref) {
586
        $record_type = $rowref->{'record_type'};
589
        $record_type = $rowref->{'record_type'};
587
        $rec_num++;
590
        $rec_num++;
Lines 621-627 sub BatchCommitRecords { Link Here
621
            $num_added++;
624
            $num_added++;
622
            if ($record_type eq 'biblio') {
625
            if ($record_type eq 'biblio') {
623
                my $biblioitemnumber;
626
                my $biblioitemnumber;
624
                ($recordid, $biblioitemnumber) = AddBiblio($marc_record, $framework);
627
                ( $recordid, $biblioitemnumber ) = AddBiblio( $marc_record, $framework, { skip_record_index => 1 } );
625
                $query = "UPDATE import_biblios SET matched_biblionumber = ? WHERE import_record_id = ?"; # FIXME call SetMatchedBiblionumber instead
628
                $query = "UPDATE import_biblios SET matched_biblionumber = ? WHERE import_record_id = ?"; # FIXME call SetMatchedBiblionumber instead
626
                if ($item_result eq 'create_new' || $item_result eq 'replace') {
629
                if ($item_result eq 'create_new' || $item_result eq 'replace') {
627
                    my ($bib_items_added, $bib_items_replaced, $bib_items_errored) = BatchCommitItems($rowref->{'import_record_id'}, $recordid, $item_result, $biblioitemnumber);
630
                    my ($bib_items_added, $bib_items_replaced, $bib_items_errored) = BatchCommitItems($rowref->{'import_record_id'}, $recordid, $item_result, $biblioitemnumber);
Lines 661-667 sub BatchCommitRecords { Link Here
661
                }
664
                }
662
665
663
                ModBiblio($marc_record, $recordid, $oldbiblio->frameworkcode, {
666
                ModBiblio($marc_record, $recordid, $oldbiblio->frameworkcode, {
664
                    overlay_context => $context
667
                    overlay_context => $context,
668
                    skip_record_index => 1,
665
                });
669
                });
666
                $query = "UPDATE import_biblios SET matched_biblionumber = ? WHERE import_record_id = ?"; # FIXME call SetMatchedBiblionumber instead
670
                $query = "UPDATE import_biblios SET matched_biblionumber = ? WHERE import_record_id = ?"; # FIXME call SetMatchedBiblionumber instead
667
671
Lines 701-709 sub BatchCommitRecords { Link Here
701
            }
705
            }
702
            SetImportRecordStatus($rowref->{'import_record_id'}, 'ignored');
706
            SetImportRecordStatus($rowref->{'import_record_id'}, 'ignored');
703
        }
707
        }
708
        push @biblionumbers, $recordid if $record_type eq 'biblio';
704
    }
709
    }
705
    $sth->finish();
710
    $sth->finish();
706
    SetImportBatchStatus($batch_id, 'imported');
711
    SetImportBatchStatus($batch_id, 'imported');
712
713
    if ( @biblionumbers ) {
714
        my $indexer = Koha::SearchEngine::Indexer->new({ index => $Koha::SearchEngine::BIBLIOS_INDEX });
715
        $indexer->index_records( \@biblionumbers, "specialUpdate", "biblioserver" );
716
    }
717
707
    return ($num_added, $num_updated, $num_items_added, $num_items_replaced, $num_items_errored, $num_ignored);
718
    return ($num_added, $num_updated, $num_items_added, $num_items_replaced, $num_items_errored, $num_ignored);
708
}
719
}
709
720
Lines 748-754 sub BatchCommitItems { Link Here
748
        my $updsth = $dbh->prepare("UPDATE import_items SET status = ?, itemnumber = ?, import_error = ? WHERE import_items_id = ?");
759
        my $updsth = $dbh->prepare("UPDATE import_items SET status = ?, itemnumber = ?, import_error = ? WHERE import_items_id = ?");
749
        if ( $action eq "replace" && $duplicate_itemnumber ) {
760
        if ( $action eq "replace" && $duplicate_itemnumber ) {
750
            # Duplicate itemnumbers have precedence, that way we can update barcodes by overlaying
761
            # Duplicate itemnumbers have precedence, that way we can update barcodes by overlaying
751
            ModItemFromMarc( $item_marc, $biblionumber, $item->{itemnumber} );
762
            ModItemFromMarc( $item_marc, $biblionumber, $item->{itemnumber}, { skip_record_index => 1 } );
752
            $updsth->bind_param( 1, 'imported' );
763
            $updsth->bind_param( 1, 'imported' );
753
            $updsth->bind_param( 2, $item->{itemnumber} );
764
            $updsth->bind_param( 2, $item->{itemnumber} );
754
            $updsth->bind_param( 3, undef );
765
            $updsth->bind_param( 3, undef );
Lines 758-764 sub BatchCommitItems { Link Here
758
            $num_items_replaced++;
769
            $num_items_replaced++;
759
        } elsif ( $action eq "replace" && $duplicate_barcode ) {
770
        } elsif ( $action eq "replace" && $duplicate_barcode ) {
760
            my $itemnumber = $duplicate_barcode->itemnumber;
771
            my $itemnumber = $duplicate_barcode->itemnumber;
761
            ModItemFromMarc( $item_marc, $biblionumber, $itemnumber );
772
            ModItemFromMarc( $item_marc, $biblionumber, $itemnumber, { skip_record_index => 1 } );
762
            $updsth->bind_param( 1, 'imported' );
773
            $updsth->bind_param( 1, 'imported' );
763
            $updsth->bind_param( 2, $item->{itemnumber} );
774
            $updsth->bind_param( 2, $item->{itemnumber} );
764
            $updsth->bind_param( 3, undef );
775
            $updsth->bind_param( 3, undef );
Lines 778-784 sub BatchCommitItems { Link Here
778
            my ( $itemtag, $itemsubfield ) = GetMarcFromKohaField( "items.itemnumber" );
789
            my ( $itemtag, $itemsubfield ) = GetMarcFromKohaField( "items.itemnumber" );
779
            $item_marc->field($itemtag)->delete_subfield( code => $itemsubfield );
790
            $item_marc->field($itemtag)->delete_subfield( code => $itemsubfield );
780
791
781
            my ( $item_biblionumber, $biblioitemnumber, $itemnumber ) = AddItemFromMarc( $item_marc, $biblionumber, {biblioitemnumber => $biblioitemnumber} );
792
            my ( $item_biblionumber, $biblioitemnumber, $itemnumber ) = AddItemFromMarc( $item_marc, $biblionumber, { biblioitemnumber => $biblioitemnumber, skip_record_index => 1 } );
782
            if( $itemnumber ) {
793
            if( $itemnumber ) {
783
                $updsth->bind_param( 1, 'imported' );
794
                $updsth->bind_param( 1, 'imported' );
784
                $updsth->bind_param( 2, $itemnumber );
795
                $updsth->bind_param( 2, $itemnumber );
Lines 827-832 sub BatchRevertRecords { Link Here
827
    $sth->execute($batch_id);
838
    $sth->execute($batch_id);
828
    my $marc_type;
839
    my $marc_type;
829
    my $marcflavour = C4::Context->preference('marcflavour');
840
    my $marcflavour = C4::Context->preference('marcflavour');
841
    my ( @deleted_biblionumbers, @updated_biblionumbers );
830
    while (my $rowref = $sth->fetchrow_hashref) {
842
    while (my $rowref = $sth->fetchrow_hashref) {
831
        $record_type = $rowref->{'record_type'};
843
        $record_type = $rowref->{'record_type'};
832
        if ($rowref->{'status'} eq 'error' or $rowref->{'status'} eq 'reverted') {
844
        if ($rowref->{'status'} eq 'error' or $rowref->{'status'} eq 'reverted') {
Lines 847-853 sub BatchRevertRecords { Link Here
847
            my $error = undef;
859
            my $error = undef;
848
            if  ($record_type eq 'biblio') {
860
            if  ($record_type eq 'biblio') {
849
                $num_items_deleted += BatchRevertItems($rowref->{'import_record_id'}, $rowref->{'matched_biblionumber'});
861
                $num_items_deleted += BatchRevertItems($rowref->{'import_record_id'}, $rowref->{'matched_biblionumber'});
850
                $error = DelBiblio($rowref->{'matched_biblionumber'});
862
                $error = DelBiblio($rowref->{'matched_biblionumber'}, { skip_record_index => 1 } );
863
                push @deleted_biblionumbers, $rowref->{'matched_biblionumber'};
851
            } else {
864
            } else {
852
                DelAuthority({ authid => $rowref->{'matched_authid'} });
865
                DelAuthority({ authid => $rowref->{'matched_authid'} });
853
            }
866
            }
Lines 868-874 sub BatchRevertRecords { Link Here
868
                next unless $oldbiblio; # Record has since been deleted. Deleted records should stay deleted.
881
                next unless $oldbiblio; # Record has since been deleted. Deleted records should stay deleted.
869
882
870
                $num_items_deleted += BatchRevertItems($rowref->{'import_record_id'}, $rowref->{'matched_biblionumber'});
883
                $num_items_deleted += BatchRevertItems($rowref->{'import_record_id'}, $rowref->{'matched_biblionumber'});
871
                ModBiblio($old_record, $biblionumber, $oldbiblio->frameworkcode);
884
                ModBiblio($old_record, $biblionumber, $oldbiblio->frameworkcode, { skip_record_index => 1 });
885
                push @updated_biblionumbers, $biblionumber;
872
            } else {
886
            } else {
873
                my $authid = $rowref->{'matched_authid'};
887
                my $authid = $rowref->{'matched_authid'};
874
                ModAuthority($authid, $old_record, GuessAuthTypeCode($old_record));
888
                ModAuthority($authid, $old_record, GuessAuthTypeCode($old_record));
Lines 877-882 sub BatchRevertRecords { Link Here
877
        } elsif ($record_result eq 'ignore') {
891
        } elsif ($record_result eq 'ignore') {
878
            if ($record_type eq 'biblio') {
892
            if ($record_type eq 'biblio') {
879
                $num_items_deleted += BatchRevertItems($rowref->{'import_record_id'}, $rowref->{'matched_biblionumber'});
893
                $num_items_deleted += BatchRevertItems($rowref->{'import_record_id'}, $rowref->{'matched_biblionumber'});
894
                push @updated_biblionumbers, $rowref->{'matched_biblionumber'};
880
            }
895
            }
881
            SetImportRecordStatus($rowref->{'import_record_id'}, 'reverted');
896
            SetImportRecordStatus($rowref->{'import_record_id'}, 'reverted');
882
        }
897
        }
Lines 892-897 sub BatchRevertRecords { Link Here
892
        $sth2->execute($rowref->{'import_record_id'});
907
        $sth2->execute($rowref->{'import_record_id'});
893
    }
908
    }
894
909
910
    if ( $record_type eq 'biblio' && ( @updated_biblionumbers || @deleted_biblionumbers ) ) {
911
        my $indexer = Koha::SearchEngine::Indexer->new({ index => $Koha::SearchEngine::BIBLIOS_INDEX });
912
        if ( @deleted_biblionumbers ) {
913
            $indexer->index_records( \@deleted_biblionumbers, "recordDelete", "biblioserver" );
914
        } else {
915
            $indexer->index_records( \@updated_biblionumbers, "specialUpdate", "biblioserver" );
916
        }
917
    }
918
895
    $sth->finish();
919
    $sth->finish();
896
    SetImportBatchStatus($batch_id, 'reverted');
920
    SetImportBatchStatus($batch_id, 'reverted');
897
    return ($num_deleted, $num_errors, $num_reverted, $num_items_deleted, $num_ignored);
921
    return ($num_deleted, $num_errors, $num_reverted, $num_items_deleted, $num_ignored);
Lines 917-923 sub BatchRevertItems { Link Here
917
    $sth->execute();
941
    $sth->execute();
918
    while (my $row = $sth->fetchrow_hashref()) {
942
    while (my $row = $sth->fetchrow_hashref()) {
919
        my $item = Koha::Items->find($row->{itemnumber});
943
        my $item = Koha::Items->find($row->{itemnumber});
920
        if ($item->safe_delete){
944
        if ($item->safe_delete({ skip_record_index => 1 })){
921
            my $updsth = $dbh->prepare("UPDATE import_items SET status = ? WHERE import_items_id = ?");
945
            my $updsth = $dbh->prepare("UPDATE import_items SET status = ? WHERE import_items_id = ?");
922
            $updsth->bind_param(1, 'reverted');
946
            $updsth->bind_param(1, 'reverted');
923
            $updsth->bind_param(2, $row->{'import_items_id'});
947
            $updsth->bind_param(2, $row->{'import_items_id'});
924
- 

Return to bug 27421