1 package OpenILS::Application::Circ::StatCat;
2 use base qw/OpenSRF::Application/;
3 use strict; use warnings;
5 use OpenSRF::EX qw/:try/;
6 use OpenILS::Application::AppUtils;
7 my $apputils = "OpenILS::Application::AppUtils";
11 __PACKAGE__->register_method(
12 method => "retrieve_stat_cats",
13 api_name => "open-ils.circ.stat_cat.user.retrieve.all");
15 __PACKAGE__->register_method(
16 method => "retrieve_stat_cats",
17 api_name => "open-ils.circ.stat_cat.copy.retrieve.all");
19 # retrieves all of the stat cats for a given org unit
20 # if no orgid, user_session->home_ou is used
22 sub retrieve_stat_cats {
23 my( $self, $client, $user_session, $orgid ) = @_;
25 my $user_obj = $apputils->check_user_session($user_session);
26 if(!$orgid) { $orgid = $user_obj->home_ou; }
28 my $method = "open-ils.storage.ranged.fleshed.actor.stat_cat.all.atomic";
29 if( $self->api_name =~ /copy/ ) {
30 $method = "open-ils.storage.ranged.fleshed.asset.stat_cat.all.atomic";
33 return $apputils->simple_scalar_request(
34 "open-ils.storage", $method, $orgid );
40 __PACKAGE__->register_method(
41 method => "stat_cat_create",
42 api_name => "open-ils.circ.stat_cat.copy.create");
44 __PACKAGE__->register_method(
45 method => "stat_cat_create",
46 api_name => "open-ils.circ.stat_cat.actor.create");
49 my( $self, $client, $user_session, $stat_cat ) = @_;
52 throw OpenSRF::EX::ERROR
53 ("stat_cat.*.create requires a stat_cat object");
56 my $user_obj = $apputils->check_user_session($user_session);
57 my $orgid = $user_obj->home_ou();
58 warn "creating new stat_cat with name " . $stat_cat->name() . "\n";
61 my $method = "open-ils.storage.direct.actor.stat_cat.create";
62 my $entry_create = "open-ils.storage.direct.actor.stat_cat_entry.create";
64 if($self->api_name =~ /copy/) {
65 $method = "open-ils.storage.direct.asset.stat_cat.create";
66 $entry_create = "open-ils.storage.direct.asset.stat_cat_entry.create";
69 my $session = $apputils->start_db_session();
70 my $newid = _create_stat_cat($session, $stat_cat, $method);
72 for my $entry ($stat_cat->entries) {
73 _create_stat_entry($session, $entry, $entry_create);
76 $apputils->commit_db_session($session);
78 warn "Stat cat creation successful with id $newid\n";
80 if( $self->api_name =~ /copy/ ) {
81 return _flesh_copy_cat($newid, $orgid);
83 return _flesh_user_cat($newid, $orgid);
93 my $session = OpenSRF::AppSession->create("open-ils.storage");
94 my $cat = $session->request(
95 "open-ils.storage.direct.actor.stat_cat.retrieve",
100 "open-ils.storage.ranged.actor.stat_cat_entry.search.stat_cat.atomic",
101 $orgid, $id )->gather(1) );
107 sub _flesh_copy_cat {
111 my $session = OpenSRF::AppSession->create("open-ils.storage");
112 my $cat = $session->request(
113 "open-ils.storage.direct.asset.stat_cat.retrieve",
118 "open-ils.storage.ranged.asset.stat_cat_entry.search.stat_cat.atomic",
119 $orgid, $id )->gather(1) );
126 sub _create_stat_cat {
127 my( $session, $stat_cat, $method) = @_;
128 $stat_cat->clear_id();
129 my $req = $session->request( $method, $stat_cat );
130 my $id = $req->gather(1);
132 throw OpenSRF::EX::ERROR
133 ("Error creating new statistical category");
139 sub _create_stat_entry {
140 my( $session, $stat_entry, $method) = @_;