1 # ---------------------------------------------------------------
2 # Copyright (C) 2005 Georgia Public Library Service
3 # Bill Erickson <highfalutin@gmail.com>
5 # This program is free software; you can redistribute it and/or
6 # modify it under the terms of the GNU General Public License
7 # as published by the Free Software Foundation; either version 2
8 # of the License, or (at your option) any later version.
10 # This program is distributed in the hope that it will be useful,
11 # but WITHOUT ANY WARRANTY; without even the implied warranty of
12 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 # GNU General Public License for more details.
14 # ---------------------------------------------------------------
16 package OpenILS::Application::Circ::StatCat;
17 use base qw/OpenSRF::Application/;
18 use strict; use warnings;
20 use OpenSRF::EX qw/:try/;
21 use OpenILS::Application::AppUtils;
22 my $apputils = "OpenILS::Application::AppUtils";
26 __PACKAGE__->register_method(
27 method => "retrieve_stat_cats",
28 api_name => "open-ils.circ.stat_cat.actor.retrieve.all");
30 __PACKAGE__->register_method(
31 method => "retrieve_stat_cats",
32 api_name => "open-ils.circ.stat_cat.asset.retrieve.all");
34 # retrieves all of the stat cats for a given org unit
35 # if no orgid, user_session->home_ou is used
37 sub retrieve_stat_cats {
38 my( $self, $client, $user_session, $orgid ) = @_;
40 my $method = "open-ils.storage.ranged.fleshed.actor.stat_cat.all.atomic";
41 if( $self->api_name =~ /asset/ ) {
42 $method = "open-ils.storage.ranged.fleshed.asset.stat_cat.all.atomic";
46 my $user_obj = $apputils->check_user_session($user_session);
47 if(!$orgid) { $orgid = $user_obj->home_ou; }
48 my $cats = $apputils->simple_scalar_request(
49 "open-ils.storage", $method, $orgid );
51 return [ sort { $a->name cmp $b->name } @$cats ];
56 __PACKAGE__->register_method(
57 method => "retrieve_ranged_intersect_stat_cats",
58 api_name => "open-ils.circ.stat_cat.asset.multirange.intersect.retrieve");
60 sub retrieve_ranged_intersect_stat_cats {
61 my( $self, $client, $user_session, $orglist ) = @_;
63 my $user_obj = $apputils->check_user_session($user_session);
64 if(!$orglist) { $orglist = [ $user_obj->home_ou ]; }
67 my %hash = map { ($_ => 1) } @$orglist;
68 $orglist = [ keys %hash ];
70 warn "range: @$orglist\n";
72 my $method = "open-ils.storage.multiranged.intersect.fleshed.asset.stat_cat.all.atomic";
73 return $apputils->simple_scalar_request(
74 "open-ils.storage", $method, $orglist );
78 __PACKAGE__->register_method(
79 method => "retrieve_ranged_union_stat_cats",
80 api_name => "open-ils.circ.stat_cat.asset.multirange.union.retrieve");
82 sub retrieve_ranged_union_stat_cats {
83 my( $self, $client, $user_session, $orglist ) = @_;
85 my $method = "open-ils.storage.multiranged.union.fleshed.asset.stat_cat.all.atomic";
87 warn "Retrieving stat_cats with method $method and orgs " . Dumper($orglist) . "\n";
89 my $user_obj = $apputils->check_user_session($user_session);
90 if(!$orglist) { $orglist = [ $user_obj->home_ou ]; }
93 my %hash = map { ($_ => 1) } @$orglist;
94 $orglist = [ keys %hash ];
96 warn "range: @$orglist\n";
98 return $apputils->simple_scalar_request(
99 "open-ils.storage", $method, $orglist );
106 __PACKAGE__->register_method(
107 method => "stat_cat_create",
108 api_name => "open-ils.circ.stat_cat.asset.create");
110 __PACKAGE__->register_method(
111 method => "stat_cat_create",
112 api_name => "open-ils.circ.stat_cat.actor.create");
114 sub stat_cat_create {
115 my( $self, $client, $user_session, $stat_cat ) = @_;
118 throw OpenSRF::EX::ERROR
119 ("stat_cat.*.create requires a stat_cat object");
122 my $user_obj = $apputils->check_user_session($user_session);
123 my $orgid = $user_obj->home_ou();
125 my $method = "open-ils.storage.direct.actor.stat_cat.create";
126 my $entry_create = "open-ils.storage.direct.actor.stat_cat_entry.create";
128 if($self->api_name =~ /asset/) {
129 $method = "open-ils.storage.direct.asset.stat_cat.create";
130 $entry_create = "open-ils.storage.direct.asset.stat_cat_entry.create";
133 my $session = $apputils->start_db_session();
134 my $newid = _create_stat_cat($session, $stat_cat, $method);
136 if( ref($stat_cat->entries) ) {
137 for my $entry (@{$stat_cat->entries}) {
138 $entry->stat_cat($newid);
139 _create_stat_entry($session, $entry, $entry_create);
143 $apputils->commit_db_session($session);
145 warn "Stat cat creation successful with id $newid\n";
147 if( $self->api_name =~ /asset/ ) {
148 return _flesh_asset_cat($newid, $orgid);
150 return _flesh_user_cat($newid, $orgid);
156 sub _flesh_user_cat {
160 my $session = OpenSRF::AppSession->create("open-ils.storage");
161 my $cat = $session->request(
162 "open-ils.storage.direct.actor.stat_cat.retrieve",
167 "open-ils.storage.ranged.actor.stat_cat_entry.search.stat_cat.atomic",
168 $orgid, $id )->gather(1) );
174 sub _flesh_asset_cat {
178 my $session = OpenSRF::AppSession->create("open-ils.storage");
179 my $cat = $session->request(
180 "open-ils.storage.direct.asset.stat_cat.retrieve",
185 "open-ils.storage.ranged.asset.stat_cat_entry.search.stat_cat.atomic",
186 $orgid, $id )->gather(1) );
193 sub _create_stat_cat {
194 my( $session, $stat_cat, $method) = @_;
195 warn "Creating new stat cat with name " . $stat_cat->name . "\n";
196 $stat_cat->clear_id();
197 my $req = $session->request( $method, $stat_cat );
198 my $id = $req->gather(1);
200 throw OpenSRF::EX::ERROR
201 ("Error creating new statistical category"); }
203 warn "Stat cat create returned id $id\n";
208 sub _create_stat_entry {
209 my( $session, $stat_entry, $method) = @_;
211 warn "Creating new stat entry with value " . $stat_entry->value . "\n";
212 $stat_entry->clear_id();
214 my $req = $session->request($method, $stat_entry);
215 my $id = $req->gather(1);
217 warn "Stat entry " . Dumper($stat_entry) . "\n";
220 throw OpenSRF::EX::ERROR
221 ("Error creating new stat cat entry"); }
223 warn "Stat cat entry create returned id $id\n";
228 __PACKAGE__->register_method(
229 method => "update_stat_entry",
230 api_name => "open-ils.circ.stat_cat.actor.entry.update");
232 __PACKAGE__->register_method(
233 method => "update_stat_entry",
234 api_name => "open-ils.circ.stat_cat.asset.entry.update");
236 sub update_stat_entry {
237 my( $self, $client, $user_session, $entry ) = @_;
239 my $user_obj = $apputils->check_user_session($user_session);
241 my $method = "open-ils.storage.direct.actor.stat_cat_entry.update";
242 if($self->api_name =~ /asset/) {
243 $method = "open-ils.storage.direct.asset.stat_cat_entry.update";
246 my $session = $apputils->start_db_session();
247 my $req = $session->request($method, $entry);
248 my $status = $req->gather(1);
249 $apputils->commit_db_session($session);
250 warn "stat cat entry with value " . $entry->value . " updated with status $status\n";
255 __PACKAGE__->register_method(
256 method => "update_stat",
257 api_name => "open-ils.circ.stat_cat.actor.update");
259 __PACKAGE__->register_method(
260 method => "update_stat",
261 api_name => "open-ils.circ.stat_cat.asset.update");
264 my( $self, $client, $user_session, $cat ) = @_;
266 my $user_obj = $apputils->check_user_session($user_session);
268 my $method = "open-ils.storage.direct.actor.stat_cat.update";
269 if($self->api_name =~ /asset/) {
270 $method = "open-ils.storage.direct.asset.stat_cat.update";
273 my $session = $apputils->start_db_session();
274 my $req = $session->request($method, $cat);
275 my $status = $req->gather(1);
276 $apputils->commit_db_session($session);
277 warn "stat cat with id " . $cat->id . " updated with status $status\n";
282 __PACKAGE__->register_method(
283 method => "create_stat_entry",
284 api_name => "open-ils.circ.stat_cat.actor.entry.create");
286 __PACKAGE__->register_method(
287 method => "create_stat_entry",
288 api_name => "open-ils.circ.stat_cat.asset.entry.create");
290 sub create_stat_entry {
291 my( $self, $client, $user_session, $entry ) = @_;
293 my $user_obj = $apputils->check_user_session($user_session);
299 my $method = "open-ils.storage.direct.actor.stat_cat_entry.create";
300 if($self->api_name =~ /asset/) {
301 $method = "open-ils.storage.direct.asset.stat_cat_entry.create";
304 my $session = $apputils->start_db_session();
305 my $req = $session->request($method, $entry);
306 my $status = $req->gather(1);
307 $apputils->commit_db_session($session);
309 warn "stat cat entry with id " . $status . " updated with status $status\n";
315 __PACKAGE__->register_method(
316 method => "create_stat_map",
317 api_name => "open-ils.circ.stat_cat.actor.user_map.create");
319 __PACKAGE__->register_method(
320 method => "create_stat_map",
321 api_name => "open-ils.circ.stat_cat.asset.copy_map.create");
323 sub create_stat_map {
324 my( $self, $client, $user_session, $map ) = @_;
326 my $user_obj = $apputils->check_user_session($user_session);
328 warn "Creating stat_cat_map\n";
332 my $method = "open-ils.storage.direct.actor.stat_cat_entry_user_map.create";
333 my $ret = "open-ils.storage.direct.actor.stat_cat_entry_user_map.retrieve";
334 if($self->api_name =~ /asset/) {
335 $method = "open-ils.storage.direct.asset.stat_cat_entry_copy_map.create";
336 $ret = "open-ils.storage.direct.asset.stat_cat_entry_copy_map.retrieve";
339 my $session = $apputils->start_db_session();
340 my $req = $session->request($method, $map);
341 my $newid = $req->gather(1);
342 warn "Created new stat cat map with id $newid\n";
343 $apputils->commit_db_session($session);
345 return $apputils->simple_scalar_request( "open-ils.storage", $ret, $newid );
350 __PACKAGE__->register_method(
351 method => "update_stat_map",
352 api_name => "open-ils.circ.stat_cat.actor.user_map.update");
354 __PACKAGE__->register_method(
355 method => "update_stat_map",
356 api_name => "open-ils.circ.stat_cat.asset.copy_map.update");
358 sub update_stat_map {
359 my( $self, $client, $user_session, $map ) = @_;
361 my $user_obj = $apputils->check_user_session($user_session);
363 warn "Updating stat_cat_map\n";
365 my $method = "open-ils.storage.direct.actor.stat_cat_entry_user_map.update";
366 if($self->api_name =~ /asset/) {
367 $method = "open-ils.storage.direct.asset.stat_cat_entry_copy_map.update";
370 my $session = $apputils->start_db_session();
371 my $req = $session->request($method, $map);
372 my $newid = $req->gather(1);
373 warn "Updated new stat cat map with id $newid\n";
374 $apputils->commit_db_session($session);
381 __PACKAGE__->register_method(
382 method => "retrieve_maps",
383 api_name => "open-ils.circ.stat_cat.actor.user_map.retrieve");
385 __PACKAGE__->register_method(
386 method => "retrieve_maps",
387 api_name => "open-ils.circ.stat_cat.asset.copy_map.retrieve");
390 my( $self, $client, $user_session, $target ) = @_;
392 my $user_obj = $apputils->check_user_session($user_session);
394 my $method = "open-ils.storage.direct.asset.stat_cat_entry_copy_map.search.owning_copy.atomic";
395 if($self->api_name =~ /actor/ ) {
396 if(!$target) { $target = $user_obj->id; }
397 $method = "open-ils.storage.direct.actor.stat_cat_entry_user_map.search.target_usr.atomic";
400 return $apputils->simple_scalar_request("open-ils.storage", $method, $target);
406 __PACKAGE__->register_method(
407 method => "delete_stats",
408 api_name => "open-ils.circ.stat_cat.actor.delete");
410 __PACKAGE__->register_method(
411 method => "delete_stats",
412 api_name => "open-ils.circ.stat_cat.asset.delete");
415 my( $self, $client, $user_session, $target ) = @_;
416 my $user_obj = $apputils->check_user_session($user_session);
417 my $session = OpenSRF::AppSession->create("open-ils.storage");
419 if($self->api_name =~ /asset/) { $type = "asset"; }
420 return _delete_stats($session, $target, $type);
424 my( $session, $stat, $type) = @_;
426 my $method = "open-ils.storage.direct.asset.stat_cat.delete";
427 if($type =~ /actor/ ) {
428 $method = "open-ils.storage.direct.actor.stat_cat.delete";
430 return $session->request($method, $stat)->gather(1);
435 __PACKAGE__->register_method(
436 method => "delete_entry",
437 api_name => "open-ils.circ.stat_cat.actor.entry.delete");
439 __PACKAGE__->register_method(
440 method => "delete_entry",
441 api_name => "open-ils.circ.stat_cat.asset.entry.delete");
444 my( $self, $client, $user_session, $target ) = @_;
445 my $user_obj = $apputils->check_user_session($user_session);
446 my $session = OpenSRF::AppSession->create("open-ils.storage");
448 if($self->api_name =~ /asset/) { $type = "asset"; }
449 return _delete_entry($session, $target, $type);
453 my( $session, $stat_entry, $type) = @_;
455 my $method = "open-ils.storage.direct.asset.stat_cat_entry.delete";
456 if($type =~ /actor/ ) {
457 $method = "open-ils.storage.direct.actor.stat_cat_entry.delete";
460 return $session->request($method, $stat_entry)->gather(1);