1 package OpenILS::Application::Storage::Publisher::asset;
2 use base qw/OpenILS::Application::Storage/;
3 #use OpenILS::Application::Storage::CDBI::asset;
4 #use OpenSRF::Utils::Logger qw/:level/;
5 #use OpenILS::Utils::Fieldmapper;
7 #my $log = 'OpenSRF::Utils::Logger';
16 return unless ($cp && $org);
18 $cp = $cp->id if (ref $cp);
19 $cp = asset::copy->retrieve($cp);
20 my $ol = $cp->call_number->owning_lib;
22 return asset::copy->db_Main->selectcol_arrayref('SELECT actor.org_unit_proximity(?,?)',{},"$ol","$org")->[0];
24 __PACKAGE__->register_method(
25 method => 'copy_proximity',
26 api_name => 'open-ils.storage.asset.copy.proximity',
31 sub asset_copy_location_all {
35 for my $rec ( asset::copy_location->retrieve_all ) {
36 $client->respond( $rec->to_fieldmapper );
41 __PACKAGE__->register_method(
42 method => 'asset_copy_location_all',
43 api_name => 'open-ils.storage.direct.asset.copy_location.retrieve.all',
53 return undef unless (@ids);
55 @ids = ($ids[0]) unless ($self->api_name =~ /batch/o);
59 my $cp = asset::copy->retrieve($id);
61 my $cp_fm = $cp->to_fieldmapper;
62 $cp_fm->circ_lib( $cp->circ_lib->to_fieldmapper );
63 $cp_fm->location( $cp->location->to_fieldmapper );
64 $cp_fm->status( $cp->status->to_fieldmapper );
65 $cp_fm->stat_cat_entries( [ map { $_->to_fieldmapper } $cp->stat_cat_entries ] );
67 $client->respond( $cp_fm );
72 __PACKAGE__->register_method(
73 api_name => 'open-ils.storage.fleshed.asset.copy.batch.retrieve',
74 method => 'fleshed_copy',
78 __PACKAGE__->register_method(
79 api_name => 'open-ils.storage.fleshed.asset.copy.retrieve',
80 method => 'fleshed_copy',
84 sub fleshed_copy_by_barcode {
89 my ($cp) = asset::copy->search( { barcode => $bc } );
91 return undef unless ($cp);
93 my $cp_fm = $cp->to_fieldmapper;
94 $cp_fm->circ_lib( $cp->circ_lib->to_fieldmapper );
95 $cp_fm->location( $cp->location->to_fieldmapper );
96 $cp_fm->status( $cp->status->to_fieldmapper );
100 __PACKAGE__->register_method(
101 api_name => 'open-ils.storage.fleshed.asset.copy.search.barcode',
102 method => 'fleshed_copy_by_barcode',
107 #XXX Fix stored proc calls
108 sub ranged_asset_stat_cat {
113 return undef unless ($ou);
114 my $s_table = asset::stat_cat->table;
116 my $select = <<" SQL";
119 JOIN actor.org_unit_full_path(?) p ON (p.id = s.owner)
124 $fleshed = 1 if ($self->api_name =~ /fleshed/o);
126 my $sth = asset::stat_cat->db_Main->prepare_cached($select);
129 for my $sc ( map { asset::stat_cat->construct($_) } $sth->fetchall_hash ) {
130 my $sc_fm = $sc->to_fieldmapper;
132 [ $self->method_lookup( 'open-ils.storage.ranged.asset.stat_cat_entry.search.stat_cat' )->run($ou,$sc->id) ]
134 $client->respond( $sc_fm );
139 __PACKAGE__->register_method(
140 api_name => 'open-ils.storage.ranged.fleshed.asset.stat_cat.all',
143 method => 'ranged_asset_stat_cat',
146 __PACKAGE__->register_method(
147 api_name => 'open-ils.storage.ranged.asset.stat_cat.all',
150 method => 'ranged_asset_stat_cat',
154 #XXX Fix stored proc calls
155 sub multiranged_asset_stat_cat {
160 return undef unless (defined($ous) and @$ous);
161 my $s_table = asset::stat_cat->table;
163 my $select = <<" SQL";
166 WHERE s.owner IN ( XXX )
170 my $collector = ' INTERSECT ';
171 my $entry_method = 'open-ils.storage.multiranged.intersect.asset.stat_cat_entry.search.stat_cat';
172 if ($self->api_name =~ /union/o) {
173 $collector = ' UNION ' if ($self->api_name =~ /union/o);
174 $entry_method = 'open-ils.storage.multiranged.union.asset.stat_cat_entry.search.stat_cat';
177 my $binds = join($collector, map { 'SELECT id FROM actor.org_unit_full_path(?)' } grep {defined} @$ous);
178 $select =~ s/XXX/$binds/so;
181 $fleshed = 1 if ($self->api_name =~ /fleshed/o);
183 my $sth = asset::stat_cat->db_Main->prepare_cached($select);
184 $sth->execute(map { "$_" } grep {defined} @$ous);
186 for my $sc ( map { asset::stat_cat->construct($_) } $sth->fetchall_hash ) {
187 my $sc_fm = $sc->to_fieldmapper;
189 [ $self->method_lookup( $entry_method )->run($ous, $sc->id) ]
191 $client->respond( $sc_fm );
196 __PACKAGE__->register_method(
197 api_name => 'open-ils.storage.multiranged.intersect.fleshed.asset.stat_cat.all',
200 method => 'multiranged_asset_stat_cat',
202 __PACKAGE__->register_method(
203 api_name => 'open-ils.storage.multiranged.union.fleshed.asset.stat_cat.all',
206 method => 'multiranged_asset_stat_cat',
209 #XXX Fix stored proc calls
210 sub ranged_asset_stat_cat_entry {
216 return undef unless ($ou);
217 my $s_table = asset::stat_cat_entry->table;
219 my $select = <<" SQL";
222 JOIN actor.org_unit_full_path(?) p ON (p.id = s.owner)
227 my $sth = asset::stat_cat->db_Main->prepare_cached($select);
228 $sth->execute($ou,$sc);
230 for my $sce ( map { asset::stat_cat_entry->construct($_) } $sth->fetchall_hash ) {
231 $client->respond( $sce->to_fieldmapper );
236 __PACKAGE__->register_method(
237 api_name => 'open-ils.storage.ranged.asset.stat_cat_entry.search.stat_cat',
240 method => 'ranged_asset_stat_cat_entry',
243 #XXX Fix stored proc calls
244 sub multiranged_asset_stat_cat_entry {
250 return undef unless (defined($ous) and @$ous);
251 my $s_table = asset::stat_cat_entry->table;
253 my $collector = ' INTERSECT ';
254 $collector = ' UNION ' if ($self->api_name =~ /union/o);
256 my $select = <<" SQL";
259 WHERE s.owner IN ( XXX ) and s.stat_cat = ?
263 my $binds = join($collector, map { 'SELECT id FROM actor.org_unit_full_path(?)' } grep {defined} @$ous);
264 $select =~ s/XXX/$binds/so;
266 my $sth = asset::stat_cat->db_Main->prepare_cached($select);
267 $sth->execute(map {"$_"} @$ous,$sc);
269 for my $sce ( map { asset::stat_cat_entry->construct($_) } $sth->fetchall_hash ) {
270 $client->respond( $sce->to_fieldmapper );
275 __PACKAGE__->register_method(
276 api_name => 'open-ils.storage.multiranged.intersect.asset.stat_cat_entry.search.stat_cat',
279 method => 'multiranged_asset_stat_cat_entry',
281 __PACKAGE__->register_method(
282 api_name => 'open-ils.storage.multiranged.union.asset.stat_cat_entry.search.stat_cat',
285 method => 'multiranged_asset_stat_cat_entry',