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; }
49 return $apputils->simple_scalar_request(
50 "open-ils.storage", $method, $orgid );
55 __PACKAGE__->register_method(
56 method => "retrieve_ranged_intersect_stat_cats",
57 api_name => "open-ils.circ.stat_cat.asset.multirange.intersect.retrieve");
59 sub retrieve_ranged_intersect_stat_cats {
60 my( $self, $client, $user_session, $orglist ) = @_;
62 my $user_obj = $apputils->check_user_session($user_session);
63 if(!$orglist) { $orglist = [ $user_obj->home_ou ]; }
66 my %hash = map { ($_ => 1) } @$orglist;
67 $orglist = [ keys %hash ];
69 warn "range: @$orglist\n";
71 my $method = "open-ils.storage.multiranged.intersect.fleshed.asset.stat_cat.all.atomic";
72 return $apputils->simple_scalar_request(
73 "open-ils.storage", $method, $orglist );
77 __PACKAGE__->register_method(
78 method => "retrieve_ranged_union_stat_cats",
79 api_name => "open-ils.circ.stat_cat.asset.multirange.union.retrieve");
81 sub retrieve_ranged_union_stat_cats {
82 my( $self, $client, $user_session, $orglist ) = @_;
84 my $method = "open-ils.storage.multiranged.union.fleshed.asset.stat_cat.all.atomic";
86 warn "Retrieving stat_cats with method $method and orgs " . Dumper($orglist) . "\n";
88 my $user_obj = $apputils->check_user_session($user_session);
89 if(!$orglist) { $orglist = [ $user_obj->home_ou ]; }
92 my %hash = map { ($_ => 1) } @$orglist;
93 $orglist = [ keys %hash ];
95 warn "range: @$orglist\n";
97 return $apputils->simple_scalar_request(
98 "open-ils.storage", $method, $orglist );
105 __PACKAGE__->register_method(
106 method => "stat_cat_create",
107 api_name => "open-ils.circ.stat_cat.asset.create");
109 __PACKAGE__->register_method(
110 method => "stat_cat_create",
111 api_name => "open-ils.circ.stat_cat.actor.create");
113 sub stat_cat_create {
114 my( $self, $client, $user_session, $stat_cat ) = @_;
117 throw OpenSRF::EX::ERROR
118 ("stat_cat.*.create requires a stat_cat object");
121 my $user_obj = $apputils->check_user_session($user_session);
122 my $orgid = $user_obj->home_ou();
124 my $method = "open-ils.storage.direct.actor.stat_cat.create";
125 my $entry_create = "open-ils.storage.direct.actor.stat_cat_entry.create";
127 if($self->api_name =~ /asset/) {
128 $method = "open-ils.storage.direct.asset.stat_cat.create";
129 $entry_create = "open-ils.storage.direct.asset.stat_cat_entry.create";
132 my $session = $apputils->start_db_session();
133 my $newid = _create_stat_cat($session, $stat_cat, $method);
135 for my $entry (@{$stat_cat->entries}) {
136 $entry->stat_cat($newid);
137 _create_stat_entry($session, $entry, $entry_create);
140 $apputils->commit_db_session($session);
142 warn "Stat cat creation successful with id $newid\n";
144 if( $self->api_name =~ /asset/ ) {
145 return _flesh_asset_cat($newid, $orgid);
147 return _flesh_user_cat($newid, $orgid);
153 sub _flesh_user_cat {
157 my $session = OpenSRF::AppSession->create("open-ils.storage");
158 my $cat = $session->request(
159 "open-ils.storage.direct.actor.stat_cat.retrieve",
164 "open-ils.storage.ranged.actor.stat_cat_entry.search.stat_cat.atomic",
165 $orgid, $id )->gather(1) );
171 sub _flesh_asset_cat {
175 my $session = OpenSRF::AppSession->create("open-ils.storage");
176 my $cat = $session->request(
177 "open-ils.storage.direct.asset.stat_cat.retrieve",
182 "open-ils.storage.ranged.asset.stat_cat_entry.search.stat_cat.atomic",
183 $orgid, $id )->gather(1) );
190 sub _create_stat_cat {
191 my( $session, $stat_cat, $method) = @_;
192 warn "Creating new stat cat with name " . $stat_cat->name . "\n";
193 $stat_cat->clear_id();
194 my $req = $session->request( $method, $stat_cat );
195 my $id = $req->gather(1);
197 throw OpenSRF::EX::ERROR
198 ("Error creating new statistical category"); }
200 warn "Stat cat create returned id $id\n";
205 sub _create_stat_entry {
206 my( $session, $stat_entry, $method) = @_;
208 warn "Creating new stat entry with value " . $stat_entry->value . "\n";
209 $stat_entry->clear_id();
211 my $req = $session->request($method, $stat_entry);
212 my $id = $req->gather(1);
214 warn "Stat entry " . Dumper($stat_entry) . "\n";
217 throw OpenSRF::EX::ERROR
218 ("Error creating new stat cat entry"); }
220 warn "Stat cat entry create returned id $id\n";
225 __PACKAGE__->register_method(
226 method => "update_stat_entry",
227 api_name => "open-ils.circ.stat_cat.actor.entry.update");
229 __PACKAGE__->register_method(
230 method => "update_stat_entry",
231 api_name => "open-ils.circ.stat_cat.asset.entry.update");
233 sub update_stat_entry {
234 my( $self, $client, $user_session, $entry ) = @_;
236 my $user_obj = $apputils->check_user_session($user_session);
238 my $method = "open-ils.storage.direct.actor.stat_cat_entry.update";
239 if($self->api_name =~ /asset/) {
240 $method = "open-ils.storage.direct.asset.stat_cat_entry.update";
243 my $session = $apputils->start_db_session();
244 my $req = $session->request($method, $entry);
245 my $status = $req->gather(1);
246 $apputils->commit_db_session($session);
247 warn "stat cat entry with value " . $entry->value . " updated with status $status\n";
252 __PACKAGE__->register_method(
253 method => "update_stat",
254 api_name => "open-ils.circ.stat_cat.actor.update");
256 __PACKAGE__->register_method(
257 method => "update_stat",
258 api_name => "open-ils.circ.stat_cat.asset.update");
261 my( $self, $client, $user_session, $cat ) = @_;
263 my $user_obj = $apputils->check_user_session($user_session);
265 my $method = "open-ils.storage.direct.actor.stat_cat.update";
266 if($self->api_name =~ /asset/) {
267 $method = "open-ils.storage.direct.asset.stat_cat.update";
270 my $session = $apputils->start_db_session();
271 my $req = $session->request($method, $cat);
272 my $status = $req->gather(1);
273 $apputils->commit_db_session($session);
274 warn "stat cat with id " . $cat->id . " updated with status $status\n";
279 __PACKAGE__->register_method(
280 method => "create_stat_entry",
281 api_name => "open-ils.circ.stat_cat.actor.entry.create");
283 __PACKAGE__->register_method(
284 method => "create_stat_entry",
285 api_name => "open-ils.circ.stat_cat.asset.entry.create");
287 sub create_stat_entry {
288 my( $self, $client, $user_session, $entry ) = @_;
290 my $user_obj = $apputils->check_user_session($user_session);
296 my $method = "open-ils.storage.direct.actor.stat_cat_entry.create";
297 if($self->api_name =~ /asset/) {
298 $method = "open-ils.storage.direct.asset.stat_cat_entry.create";
301 my $session = $apputils->start_db_session();
302 my $req = $session->request($method, $entry);
303 my $status = $req->gather(1);
304 $apputils->commit_db_session($session);
306 warn "stat cat entry with id " . $status . " updated with status $status\n";
312 __PACKAGE__->register_method(
313 method => "create_stat_map",
314 api_name => "open-ils.circ.stat_cat.actor.user_map.create");
316 __PACKAGE__->register_method(
317 method => "create_stat_map",
318 api_name => "open-ils.circ.stat_cat.asset.copy_map.create");
320 sub create_stat_map {
321 my( $self, $client, $user_session, $map ) = @_;
323 my $user_obj = $apputils->check_user_session($user_session);
325 warn "Creating stat_cat_map\n";
329 my $method = "open-ils.storage.direct.actor.stat_cat_entry_user_map.create";
330 my $ret = "open-ils.storage.direct.actor.stat_cat_entry_user_map.retrieve";
331 if($self->api_name =~ /asset/) {
332 $method = "open-ils.storage.direct.asset.stat_cat_entry_copy_map.create";
333 $ret = "open-ils.storage.direct.asset.stat_cat_entry_copy_map.retrieve";
336 my $session = $apputils->start_db_session();
337 my $req = $session->request($method, $map);
338 my $newid = $req->gather(1);
339 warn "Created new stat cat map with id $newid\n";
340 $apputils->commit_db_session($session);
342 return $apputils->simple_scalar_request( "open-ils.storage", $ret, $newid );
347 __PACKAGE__->register_method(
348 method => "update_stat_map",
349 api_name => "open-ils.circ.stat_cat.actor.user_map.update");
351 __PACKAGE__->register_method(
352 method => "update_stat_map",
353 api_name => "open-ils.circ.stat_cat.asset.copy_map.update");
355 sub update_stat_map {
356 my( $self, $client, $user_session, $map ) = @_;
358 my $user_obj = $apputils->check_user_session($user_session);
360 warn "Updating stat_cat_map\n";
362 my $method = "open-ils.storage.direct.actor.stat_cat_entry_user_map.update";
363 if($self->api_name =~ /asset/) {
364 $method = "open-ils.storage.direct.asset.stat_cat_entry_copy_map.update";
367 my $session = $apputils->start_db_session();
368 my $req = $session->request($method, $map);
369 my $newid = $req->gather(1);
370 warn "Updated new stat cat map with id $newid\n";
371 $apputils->commit_db_session($session);
378 __PACKAGE__->register_method(
379 method => "retrieve_maps",
380 api_name => "open-ils.circ.stat_cat.actor.user_map.retrieve");
382 __PACKAGE__->register_method(
383 method => "retrieve_maps",
384 api_name => "open-ils.circ.stat_cat.asset.copy_map.retrieve");
387 my( $self, $client, $user_session, $target ) = @_;
389 my $user_obj = $apputils->check_user_session($user_session);
391 my $method = "open-ils.storage.direct.asset.stat_cat_entry_copy_map.search.owning_copy.atomic";
392 if($self->api_name =~ /actor/ ) {
393 if(!$target) { $target = $user_obj->id; }
394 $method = "open-ils.storage.direct.actor.stat_cat_entry_user_map.search.target_usr.atomic";
397 return $apputils->simple_scalar_request("open-ils.storage", $method, $target);
403 __PACKAGE__->register_method(
404 method => "delete_stats",
405 api_name => "open-ils.circ.stat_cat.actor.delete");
407 __PACKAGE__->register_method(
408 method => "delete_stats",
409 api_name => "open-ils.circ.stat_cat.asset.delete");
412 my( $self, $client, $user_session, $target ) = @_;
413 my $user_obj = $apputils->check_user_session($user_session);
414 my $session = OpenSRF::AppSession->create("open-ils.storage");
416 if($self->api_name =~ /asset/) { $type = "asset"; }
417 return _delete_stats($session, $target, $type);
421 my( $session, $stat, $type) = @_;
423 my $method = "open-ils.storage.direct.asset.stat_cat.delete";
424 if($type =~ /actor/ ) {
425 $method = "open-ils.storage.direct.actor.stat_cat.delete";
427 return $session->request($method, $stat)->gather(1);
432 __PACKAGE__->register_method(
433 method => "delete_entry",
434 api_name => "open-ils.circ.stat_cat.actor.entry.delete");
436 __PACKAGE__->register_method(
437 method => "delete_entry",
438 api_name => "open-ils.circ.stat_cat.asset.entry.delete");
441 my( $self, $client, $user_session, $target ) = @_;
442 my $user_obj = $apputils->check_user_session($user_session);
443 my $session = OpenSRF::AppSession->create("open-ils.storage");
445 if($self->api_name =~ /asset/) { $type = "asset"; }
446 return _delete_entry($session, $target, $type);
450 my( $session, $stat_entry, $type) = @_;
452 my $method = "open-ils.storage.direct.asset.stat_cat_entry.delete";
453 if($type =~ /actor/ ) {
454 $method = "open-ils.storage.direct.actor.stat_cat_entry.delete";
457 return $session->request($method, $stat_entry)->gather(1);