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';
9 sub asset_copy_location_all {
13 for my $rec ( asset::copy_location->retrieve_all ) {
14 $client->respond( $rec->to_fieldmapper );
19 __PACKAGE__->register_method(
20 method => 'asset_copy_location_all',
21 api_name => 'open-ils.storage.direct.asset.copy_location.retrieve.all',
31 return undef unless (@ids);
33 @ids = ($ids[0]) unless ($self->api_name =~ /batch/o);
37 my $cp = asset::copy->retrieve($id);
39 my $cp_fm = $cp->to_fieldmapper;
40 $cp_fm->circ_lib( $cp->circ_lib->to_fieldmapper );
41 $cp_fm->location( $cp->location->to_fieldmapper );
42 $cp_fm->status( $cp->status->to_fieldmapper );
43 $cp_fm->stat_cat_entries( [ map { $_->to_fieldmapper } $cp->stat_cat_entries ] );
45 $client->respond( $cp_fm );
50 __PACKAGE__->register_method(
51 api_name => 'open-ils.storage.fleshed.asset.copy.batch.retrieve',
52 method => 'fleshed_copy',
56 __PACKAGE__->register_method(
57 api_name => 'open-ils.storage.fleshed.asset.copy.retrieve',
58 method => 'fleshed_copy',
62 sub fleshed_copy_by_barcode {
67 my ($cp) = asset::copy->search( { barcode => $bc } );
69 return [] unless ($cp);
71 my $cp_fm = $cp->to_fieldmapper;
72 $cp_fm->circ_lib( $cp->circ_lib->to_fieldmapper );
73 $cp_fm->location( $cp->location->to_fieldmapper );
74 $cp_fm->status( $cp->status->to_fieldmapper );
78 __PACKAGE__->register_method(
79 api_name => 'open-ils.storage.fleshed.asset.copy.search.barcode',
80 method => 'fleshed_copy_by_barcode',
85 #XXX Fix stored proc calls
86 sub ranged_asset_stat_cat {
91 return undef unless ($ou);
92 my $s_table = asset::stat_cat->table;
94 my $select = <<" SQL";
97 JOIN actor.org_unit_full_path(?) p ON (p.id = s.owner)
102 $fleshed = 1 if ($self->api_name =~ /fleshed/o);
104 my $sth = asset::stat_cat->db_Main->prepare_cached($select);
107 for my $sc ( map { asset::stat_cat->construct($_) } $sth->fetchall_hash ) {
108 my $sc_fm = $sc->to_fieldmapper;
110 [ $self->method_lookup( 'open-ils.storage.ranged.asset.stat_cat_entry.search.stat_cat' )->run($ou,$sc->id) ]
112 $client->respond( $sc_fm );
117 __PACKAGE__->register_method(
118 api_name => 'open-ils.storage.ranged.fleshed.asset.stat_cat.all',
121 method => 'ranged_asset_stat_cat',
124 __PACKAGE__->register_method(
125 api_name => 'open-ils.storage.ranged.asset.stat_cat.all',
128 method => 'ranged_asset_stat_cat',
132 #XXX Fix stored proc calls
133 sub multiranged_asset_stat_cat {
138 return undef unless (defined($ous) and @$ous);
139 my $s_table = asset::stat_cat->table;
141 my $select = <<" SQL";
144 WHERE s.owner IN ( XXX )
148 my $collector = ' INTERSECT ';
149 my $entry_method = 'open-ils.storage.multiranged.intersect.asset.stat_cat_entry.search.stat_cat';
150 if ($self->api_name =~ /union/o) {
151 $collector = ' UNION ' if ($self->api_name =~ /union/o);
152 $entry_method = 'open-ils.storage.multiranged.union.asset.stat_cat_entry.search.stat_cat';
155 my $binds = join($collector, map { 'SELECT id FROM actor.org_unit_full_path(?)' } grep {defined} @$ous);
156 $select =~ s/XXX/$binds/so;
159 $fleshed = 1 if ($self->api_name =~ /fleshed/o);
161 my $sth = asset::stat_cat->db_Main->prepare_cached($select);
162 $sth->execute(map { "$_" } grep {defined} @$ous);
164 for my $sc ( map { asset::stat_cat->construct($_) } $sth->fetchall_hash ) {
165 my $sc_fm = $sc->to_fieldmapper;
167 [ $self->method_lookup( $entry_method )->run($ous, $sc->id) ]
169 $client->respond( $sc_fm );
174 __PACKAGE__->register_method(
175 api_name => 'open-ils.storage.multiranged.intersect.fleshed.asset.stat_cat.all',
178 method => 'multiranged_asset_stat_cat',
180 __PACKAGE__->register_method(
181 api_name => 'open-ils.storage.multiranged.union.fleshed.asset.stat_cat.all',
184 method => 'multiranged_asset_stat_cat',
187 #XXX Fix stored proc calls
188 sub ranged_asset_stat_cat_entry {
194 return undef unless ($ou);
195 my $s_table = asset::stat_cat_entry->table;
197 my $select = <<" SQL";
200 JOIN actor.org_unit_full_path(?) p ON (p.id = s.owner)
205 my $sth = asset::stat_cat->db_Main->prepare_cached($select);
206 $sth->execute($ou,$sc);
208 for my $sce ( map { asset::stat_cat_entry->construct($_) } $sth->fetchall_hash ) {
209 $client->respond( $sce->to_fieldmapper );
214 __PACKAGE__->register_method(
215 api_name => 'open-ils.storage.ranged.asset.stat_cat_entry.search.stat_cat',
218 method => 'ranged_asset_stat_cat_entry',
221 #XXX Fix stored proc calls
222 sub multiranged_asset_stat_cat_entry {
228 return undef unless (defined($ous) and @$ous);
229 my $s_table = asset::stat_cat_entry->table;
231 my $collector = ' INTERSECT ';
232 $collector = ' UNION ' if ($self->api_name =~ /union/o);
234 my $select = <<" SQL";
237 WHERE s.owner IN ( XXX ) and s.stat_cat = ?
241 my $binds = join($collector, map { 'SELECT id FROM actor.org_unit_full_path(?)' } grep {defined} @$ous);
242 $select =~ s/XXX/$binds/so;
244 my $sth = asset::stat_cat->db_Main->prepare_cached($select);
245 $sth->execute(map {"$_"} @$ous,$sc);
247 for my $sce ( map { asset::stat_cat_entry->construct($_) } $sth->fetchall_hash ) {
248 $client->respond( $sce->to_fieldmapper );
253 __PACKAGE__->register_method(
254 api_name => 'open-ils.storage.multiranged.intersect.asset.stat_cat_entry.search.stat_cat',
257 method => 'multiranged_asset_stat_cat_entry',
259 __PACKAGE__->register_method(
260 api_name => 'open-ils.storage.multiranged.union.asset.stat_cat_entry.search.stat_cat',
263 method => 'multiranged_asset_stat_cat_entry',