4 #use warnings; FIXME - Bug 2505
6 # find Koha's Perl modules
7 # test carefully before changing this
9 eval { require "$FindBin::Bin/../kohalib.pl" };
20 # command-line parameters
25 my $result = GetOptions
(
26 'run-update' => \
$do_update,
27 'where=s@' => \
$wherestrings,
28 'h|help' => \
$want_help,
31 if (not $result or $want_help or not $do_update) {
36 my $num_bibs_processed = 0;
37 my $num_bibs_modified = 0;
38 my $num_noitem_forbarcode = 0;
39 my $num_nobarcode_inhostfield =0;
40 my $num_hostfields_unabletomodify =0;
42 my $dbh = C4
::Context
->dbh;
43 $dbh->{AutoCommit
} = 0;
51 my $sql = "SELECT biblionumber FROM biblio JOIN biblioitems USING (biblionumber)";
52 $sql.="WHERE ". join(" AND ",@
$wherestrings) if ($wherestrings);
53 $sql.="ORDER BY biblionumber ASC";
54 my $sth = $dbh->prepare($sql);
55 eval{$sth->execute();};
56 if ($@
){ die "error $@";};
57 while (my ($biblionumber) = $sth->fetchrow_array()) {
58 $num_bibs_processed++;
59 process_bib
($biblionumber);
61 if (($num_bibs_processed % 100) == 0) {
62 print_progress_and_commit
($num_bibs_processed);
70 Create Analytical records relationships report
71 -----------------------------------------------
72 Number of bibs checked
: $num_bibs_processed
73 Number of bibs modified
: $num_bibs_modified
74 Number of hostfields with
no barcodes
: $num_nobarcode_inhostfield
75 Number of barcodes
not found
: $num_noitem_forbarcode
76 Number of hostfields unable to modify
: $num_hostfields_unabletomodify
77 Number of bibs with errors
: $num_bad_bibs
82 my $biblionumber = shift;
84 my $bib = GetMarcBiblio
({ biblionumber
=> $biblionumber });
85 unless (defined $bib) {
86 print "\nCould not retrieve bib $biblionumber from the database - record is corrupt.\n";
90 #loop through each host field and populate subfield 0 and 9
91 my $analyticfield = '773';
92 foreach my $hostfield ( $bib->field($analyticfield) ) {
93 if(my $barcode = $hostfield->subfield('o')){
94 my $item = Koha
::Items
->find({ barcode
=> $barcode });
97 if ( $hostfield->subfield('0') ne $biblionumber ) {
98 $hostfield->update( '0', $biblionumber );
101 if ( $hostfield->subfield('9') ne $item->itemnumber ) {
102 $hostfield->update( '9', $item->itemnumber );
106 $num_bibs_modified++;
107 my $modresult = ModBiblio
( $bib, $biblionumber, '' );
108 warn "Modifying biblio $biblionumber";
110 warn "Unable to modify biblio $biblionumber with update host field";
111 $num_hostfields_unabletomodify++;
116 warn "No item record found for barcode $barcode";
117 $num_noitem_forbarcode++;
120 warn "No barcode in host field for biblionumber $biblionumber";
121 $num_nobarcode_inhostfield++;
126 sub print_progress_and_commit
{
129 print "... processed $recs records\n";
134 $0: establish relationship to host items
136 Based on barcode
in host field populates subfield
0 with host biblionumber
and subfield
9 with host itemnumber
.
138 Subfield
0 and 9 are used
in Koha screns to display relationships between analytical records
and host bibs
and items
.
140 NOT usable with UNIMARC data
. You can
use it only
if you have tag
461 with also an items id
(like barcode
or item numbers
). In UNIMARC this situation is very rare
. If you have data coded
in this way
, send a mail to koha
-dev mailing list
and ask
for the feature
.
143 --run
-update run the synchronization
144 --where condition selects the biblios on a criterium
(Repeatable
)
145 --help
or -h show this message
.