1 package OpenILS::Application::Storage::Publisher::biblio;
2 use base qw/OpenILS::Application::Storage/;
4 use OpenSRF::EX qw/:try/;
5 use OpenILS::Application::Storage::CDBI::biblio;
6 use OpenILS::Application::Storage::CDBI::asset;
7 use OpenILS::Utils::Fieldmapper;
12 sub record_copy_count {
18 if ($self->api_name !~ /batch/o) {
22 throw OpenSRF::EX::InvalidArg ( "No org_unit id passed!" )
25 throw OpenSRF::EX::InvalidArg ( "No record id passed!" )
28 $org_unit_lookup ||= $self->method_lookup('open-ils.storage.actor.org_unit.retrieve');
29 my ($org_unit) = $org_unit_lookup->run($oid);
31 # XXX Use descendancy tree here!!!
32 my $short_name_hack = $org_unit->shortname;
33 $short_name_hack = '' if (!$org_unit->parent_ou);
34 $short_name_hack .= '%';
35 # XXX Use descendancy tree here!!!
37 my $rec_list = join(',',@recs);
39 my $cp_table = asset::copy->table;
40 my $cn_table = asset::call_number->table;
43 SELECT cn.record as record, count(cp.*) as copies
45 JOIN $cp_table cp ON (cp.call_number = cn.id)
46 WHERE cn.owning_lib LIKE ? AND
47 cn.record IN ($rec_list)
51 my $sth = asset::copy->db_Main->prepare_cached($select);
52 $sth->execute($short_name_hack);
54 my $results = $sth->fetchall_hashref('record');
56 $client->respond($$results{$_}{copies} || 0) for (@recs);
60 __PACKAGE__->register_method(
61 method => 'record_copy_count',
62 api_name => 'open-ils.storage.biblio.record_copy_count',
66 __PACKAGE__->register_method(
67 method => 'record_copy_count',
68 api_name => 'open-ils.storage.biblio.record_copy_count.batch',
74 sub create_record_entry {
80 my $rec = biblio::record_entry->create($metadata);
81 $client->respond( $rec->id );
83 $client->respond( 0 );
88 #__PACKAGE__->register_method(
89 #method => 'create_record_entry',
90 #api_name => 'open-ils.storage.biblio.record_entry.create',
95 #Params should be passed as a hash ref!
101 #Please at least try to fill in:
113 sub update_record_entry {
120 $success = biblio::record_entry->update($entry);
127 #__PACKAGE__->register_method(
128 #method => 'update_record_entry',
129 #api_name => 'open-ils.storage.biblio.record_entry.update',
134 sub delete_record_entry {
139 my $rec = biblio::record_entry->delete($entry);
140 return 0 unless ($rec);
143 #__PACKAGE__->register_method(
144 #method => 'delete_record_entry',
145 #api_name => 'open-ils.storage.biblio.record_entry.delete',
150 sub search_record_entry_one_field {
155 (my $search_field = $self->api_name) =~ s/^.*\.search\.([^\.]+).*?$/$1/o;
157 for my $id ( @ids ) {
160 for my $rec ( biblio::record_entry->fast_fieldmapper($search_field => "$id") ) {
161 $client->respond( $rec ) if ($rec);
164 last if ($self->api_name !~ /list/o);
168 #__PACKAGE__->register_method(
169 #method => 'search_record_entry_one_field',
170 #api_name => 'open-ils.storage.biblio.record_entry.search.tcn_value',
175 #__PACKAGE__->register_method(
176 #method => 'search_record_entry_one_field',
177 #api_name => 'open-ils.storage.biblio.record_entry.search.tcn_value.list',
183 sub get_record_entry {
188 for my $id ( @ids ) {
191 my ($rec) = biblio::record_entry->fast_fieldmapper($id);
192 $client->respond( $rec ) if ($rec);
194 last if ($self->api_name !~ /list/o);
198 #__PACKAGE__->register_method(
199 # method => 'get_record_entry',
200 # api_name => 'open-ils.storage.biblio.record_entry.retrieve',
204 #__PACKAGE__->register_method(
205 # method => 'get_record_entry',
206 # api_name => 'open-ils.storage.biblio.record_entry.retrieve.list',
212 sub create_record_node {
218 my $n = biblio::record_node->create($node);
219 $client->respond( $n->id );
221 $client->respond( 0 );
226 #__PACKAGE__->register_method(
227 # method => 'create_record_node',
228 # api_name => 'open-ils.storage.biblio.record_node.create',
233 sub update_record_node {
240 $success = biblio::record_node->update($node);
247 #__PACKAGE__->register_method(
248 # method => 'update_record_node',
249 # api_name => 'open-ils.storage.biblio.record_node.update',
254 sub delete_record_node {
259 my $rec = biblio::record_node->delete($node);
260 return 0 unless ($rec);
263 #__PACKAGE__->register_method(
264 # method => 'delete_record_node',
265 # api_name => 'open-ils.storage.biblio.record_node.delete',
270 sub get_record_node {
275 for my $id ( @ids ) {
278 my ($rec) = biblio::record_node->fast_fieldmapper($id);
279 $client->respond( $rec ) if ($rec);
281 last if ($self->api_name !~ /list/o);
285 #__PACKAGE__->register_method(
286 #method => 'get_record_node',
287 #api_name => 'open-ils.storage.biblio.record_node.retrieve',
291 #__PACKAGE__->register_method(
292 #method => 'get_record_node',
293 #api_name => 'open-ils.storage.biblio.record_node.retrieve.list',
299 sub create_record_nodeset {
304 my $method = $self->method_lookup('open-ils.storage.biblio.record_node.create');
307 while ( my $node = shift(@nodes) ) {
308 my ($res) = $method->run( $node );
309 push(@success, $res) if ($res >= 0);
312 my $insert_total = 0;
313 $insert_total += $_ for (@success);
315 return $insert_total;
317 #__PACKAGE__->register_method(
318 # method => 'create_record_nodeset',
319 # api_name => 'open-ils.storage.biblio.record_node.batch.create',
324 sub update_record_nodeset {
329 my $method = $self->method_lookup('open-ils.storage.biblio.record_node.update');
332 while ( my $node = shift(@stuff) ) {
333 my ($res) = $method->run( $node );
334 push(@success, $res) if ($res >= 0);
338 $update_total += $_ for (@success);
340 return $update_total;
342 #__PACKAGE__->register_method(
343 # method => 'update_record_nodeset',
344 # api_name => 'open-ils.storage.biblio.record_node.batch.update',
349 sub delete_record_nodeset {
353 my $method = $self->method_lookup('open-ils.storage.biblio.record_node.delete');
356 while ( my $node = shift(@_) ) {
357 my ($res) = $method->run( $node );
358 push(@success, $res) if ($res >= 0);
361 my $delete_total = 0;
362 $delete_total += $_ for (@success);
364 return $delete_total;
366 #__PACKAGE__->register_method(
367 # method => 'delete_record_nodeset',
368 # api_name => 'open-ils.storage.biblio.record_node.batch.delete',
373 sub get_record_nodeset {
378 for my $id ( @ids ) {
381 $client->respond( [biblio::record_node->fast_fieldmapper( owner_doc => "$id", {order_by => 'intra_doc_id'} )] );
383 last if ($self->api_name !~ /list/o);
387 #__PACKAGE__->register_method(
388 #method => 'get_record_nodeset',
389 #api_name => 'open-ils.storage.biblio.record_entry.nodeset.retrieve',
393 #__PACKAGE__->register_method(
394 #method => 'get_record_nodeset',
395 #api_name => 'open-ils.storage.biblio.record_entry.nodeset.retrieve.list',