3 use lib '../../perlmods/';
4 use lib '../../../../OpenSRF/src/perlmods/';
5 use OpenSRF::EX qw/:try/;
7 use OpenILS::Utils::Fieldmapper;
13 my ($config, $userid, $skip) = ('/pines/conf/bootstrap.conf', 1, 0);
17 "userid=i" => \$userid,
21 OpenSRF::System->bootstrap_client( config_file => $config );
22 my $st_server = OpenSRF::AppSession->create( 'open-ils.storage' );
26 throw OpenSRF::EX::PANIC ("I can't connect to the storage server!")
27 if (!$st_server->connect);
36 while ( my $xml = <> ) {
42 warn "!!!!!!!!!!!!!!! NO XML !!!!!!!!!!!!!!!\n";
46 my $doc = XML::LibXML->new()->parse_string($xml);
47 my $tcn = $doc->documentElement->findvalue( '/*/*[@tag="035"]' );
49 $tcn =~ s/^.*?(\w+)$/$1/go;
53 warn " Skipping $tcn...\n";
59 warn "Adding holdings for TCN $tcn\n";
61 warn " ==> Starting transaction...\n";
63 my $xact = $st_server->request( 'open-ils.storage.transaction.begin' );
67 die "Couldn't start transaction!" unless ($r);
68 die $r unless (UNIVERSAL::can($r, 'content'));
70 warn " ==> Transaction ".$xact->session->session_id." started\n";
72 my $req = $st_server->request( 'open-ils.storage.biblio.record_entry.search.tcn_value' => $tcn );
76 my $resp = $req->recv;
79 if( $resp && !$resp->can('content') ) {
80 warn ("Failed to retrieve record for TCN [$tcn]. Got an exception!! -- ".$resp->toString."\n");
83 warn ("!!-> Failed to retrieve record for TCN [$tcn].\n");
87 my $rec = $resp->content;
89 warn ("Failed to retrieve record for TCN [$tcn].\n");
96 for my $node ($doc->documentElement->findnodes('/*/*[@tag="999"]')) {
97 unless ($rec->id > $skip) {
98 warn("Skipping record ".$rec->id."\n");
102 my $barcode = $node->findvalue( '*[@code="i"]' );
103 my $cp_req = $st_server->request( 'open-ils.storage.asset.copy.search.barcode' => $barcode );
105 $cp_req->wait_complete;
107 my $cp_resp = $cp_req->recv;
110 if ($cp_resp && !$cp_resp->isa('Error') && @{ $cp_resp->content }) {
111 warn "Skipping barcode $barcode\n";
116 warn " (record_entry id is ".$rec->id.")\n";
118 my $label = $node->findvalue( '*[@code="a"]' );
119 my $owning_lib = $node->findvalue( '*[@code="m"]' );
121 my $cn_req = $st_server->request( 'open-ils.storage.asset.call_number.search' =>
122 { owning_lib => $owning_lib,
128 $cn_req->wait_complete;
130 my $cn_resp = $cn_req->recv;
135 if ( $cn_resp && !$cn_resp->can('content') ) {
136 warn ("Failed to retrieve call_number for $owning_lib:$label. Got an exception!! -- ".$cn_resp->toString."\n");
138 } elsif (!$cn_resp) {
139 $cn = new Fieldmapper::asset::call_number;
140 $cn->editor( $userid );
141 $cn->creator( $userid );
142 $cn->record( $rec->id );
143 $cn->label( $label );
144 $cn->owning_lib( $owning_lib );
146 $cn_req = $st_server->request( 'open-ils.storage.asset.call_number.create' => $cn );
147 $cn_req->wait_complete;
149 $cn_resp = $cn_req->recv;
150 unless( $cn_resp && $cn_resp->can('content') && $cn_resp->content ) {
151 warn ("Failed to create call_number for $owning_lib:$label. Got an exception!! -- ".$cn_resp->toString."\n");
154 $cn->id($cn_resp->content);
157 $cn = $cn_resp->content;
158 #warn ("Skipping call_number ".$cn->id."\n");
162 warn " (call_number id is ".$cn->id.")\n";
164 my $barcode = $node->findvalue( '*[@code="i"]' );
165 my $cp_req = $st_server->request( 'open-ils.storage.asset.copy.search.barcode' => $barcode );
167 $cp_req->wait_complete;
169 my $cp_resp = $cp_req->recv;
172 if ($cp_resp && !$cp_resp->isa('Error') && $cp_resp->content) {
173 warn "Skipping barcode $barcode\n";
176 my $cp = new Fieldmapper::asset::copy;
177 $cp->editor( $userid );
178 $cp->creator( $userid );
179 $cp->call_number( $cn->id );
181 my $price = $node->findvalue( '*[@code="p"]' );
182 my $genre = $node->findvalue( '*[@code="x"]' );
183 my $audience = $node->findvalue( '*[@code="z"]' );
184 my $home_lib = $node->findvalue( '*[@code="m"]' );
185 my $status = $node->findvalue( '*[@code="k"]' );
186 my $copy_number = $node->findvalue( '*[@code="c"]' );
188 $cp->barcode( $barcode );
189 $cp->price( $price );
190 $cp->genre( $genre );
191 $cp->audience( $audience );
192 $cp->home_lib( $home_lib );
193 $cp->status( $status );
194 $cp->copy_number( $copy_number );
196 $cp->loan_duration( 2 );
197 $cp->fine_level( 2 );
200 $cp->deposit( '0.00' );
201 $cp->opac_visible( 1 );
202 $cp->shelving_loc( 'stacks');
204 warn " (copy_number is ".$cp->copy_number.")\n";
205 my $cp_req = $st_server->request( 'open-ils.storage.asset.copy.create' => $cp );
206 $cp_req->wait_complete;
208 my $cp_resp = $cp_req->recv;
209 unless( $cp_resp && $cp_resp->can('content') && $cp_resp->content ) {
210 throw OpenSRF::EX::ERROR ("Failed to create copy for $barcode. Got an exception!! -- ".$cp_resp->toString);
215 warn " !!> Rolling back transaction\n".shift();
216 $xact = $st_server->request( 'open-ils.storage.transaction.rollback' );
217 $xact->wait_complete;
219 die $r unless (UNIVERSAL::can($r, 'content'));
220 die "Couldn't rollback transaction!" unless ($r->content);
227 # my $cp_req = $st_server->request('open-ils.storage.asset.copy.batch.create',@cps);
228 # $cp_req->wait_complete;
232 $xact = $st_server->request( 'open-ils.storage.transaction.commit' );
233 $xact->wait_complete;
235 die $r unless (UNIVERSAL::can($r, 'content'));
236 die "Couldn't commit transaction!" unless ($r->content);
237 warn " ==> Commited any changes\n";