4 use Time::HiRes qw/time/;
12 my ($userid, $sourceid, $cn_id, $cp_id, $cp_file, $cn_file, $map_file, $lib_map_file) =
13 (1, 2, 1, 1, 'asset_copy.sql','asset_volume.sql','record_id_map.pl','lib-map.pl');
16 "sourceid" => \$sourceid,
17 "copy_file=s" => \$cp_file,
18 "volume_file=s" => \$cn_file,
19 "tcn_map_file=s" => \$map_file,
20 "lib_map_file=s" => \$lib_map_file,
21 "userid=i" => \$userid,
22 "first_volume=i" => \$cn_id,
23 "first_copy=i" => \$cp_id,
30 eval `cat $lib_map_file`;
32 open CP, ">$cp_file" or die "Can't open $cp_file! $!\n";
33 open CN, ">$cn_file" or die "Can't open $cn_file! $!\n";
44 'ON HOLDS SHELF' => 8,
54 SET CLIENT_ENCODING TO 'UNICODE';
55 COPY asset.copy (id,circ_lib,editor,creator,barcode,call_number,copy_number,status,loan_duration,fine_level,circulate,deposit,deposit_amount,price,ref,opac_visible) FROM STDIN;
59 SET CLIENT_ENCODING TO 'UNICODE';
60 COPY asset.call_number (id,editor,creator,record,label,owning_lib) FROM STDIN;
65 my $parser = XML::LibXML->new;
70 while ( $xml .= <STDIN> ) {
78 $doc = $parser->parse_string($xml);;
79 $tcn = $doc->documentElement->findvalue( '/*/*[@tag="035"][1]' );
88 $tcn =~ s/^.*?(\w+)\s*$/$1/go;
91 warn "\nNo TCN found in rec!!\n";
96 unless (exists($$tcn_map{$tcn})) {
97 warn "\n !! TCN $tcn not in the map!\n";
102 my $rec_id = $$tcn_map{$tcn};
104 for my $node ($doc->documentElement->findnodes('/*/*[@tag="999"]')) {
105 my $barcode = $node->findvalue( '*[@code="i"]' );
106 my $label = $node->findvalue( '*[@code="a"]' );
107 my $owning_lib = $$lib_map{ $node->findvalue( '*[@code="m"]' ) };
108 my $price = $node->findvalue( '*[@code="p"]' );
109 my $copy_number = $node->findvalue( '*[@code="c"]' );
110 my $available = $node->findvalue( '*[@code="k"]' ) || '';
112 my $status = $status_map{$available} || 0;
114 next unless $barcode;
115 next unless $owning_lib;
118 $barcode =~ s/\\/\\\\/og;
119 $label =~ s/\\/\\\\/og;
121 if ($price !~ /^\s*\d{1,6}\.\d{2}\s*$/o) {
125 unless (exists($$cn_map{"$rec_id/$owning_lib/$label"})) {
126 $$cn_map{"$rec_id/$owning_lib/$label"} = $cn_id;
127 print CN join("\t",($cn_id,$userid,$userid,$rec_id,$label,$owning_lib))."\n";
132 # id,editor,creator,barcode,call_number,copy_number,available,loan_duration,fine_level,circulate,deposit,deposit_amount,price,ref,opac_visible
134 print CP join("\t", ( $cp_id,$owning_lib,$userid,$userid,$barcode,
135 $$cn_map{"$rec_id/$owning_lib/$label"},
136 $copy_number,$status,2,2,1,0,'0.00',
146 print CN "SELECT setval('asset.call_number_id_seq'::TEXT, $cn_id);\n";
148 print CP "SELECT setval('asset.copy_id_seq'::TEXT, $cp_id);\n";