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();
59 my $method = "open-ils.storage.direct.actor.stat_cat.create";
60 my $entry_create = "open-ils.storage.direct.actor.stat_cat_entry.create";
62 if($self->api_name =~ /copy/) {
63 $method = "open-ils.storage.direct.asset.stat_cat.create";
64 $entry_create = "open-ils.storage.direct.asset.stat_cat_entry.create";
67 my $session = $apputils->start_db_session();
68 my $newid = _create_stat_cat($session, $stat_cat, $method);
70 for my $entry (@{$stat_cat->entries}) {
71 $entry->stat_cat($newid);
72 _create_stat_entry($session, $entry, $entry_create);
75 $apputils->commit_db_session($session);
77 warn "Stat cat creation successful with id $newid\n";
79 if( $self->api_name =~ /copy/ ) {
80 return _flesh_copy_cat($newid, $orgid);
82 return _flesh_user_cat($newid, $orgid);
92 my $session = OpenSRF::AppSession->create("open-ils.storage");
93 my $cat = $session->request(
94 "open-ils.storage.direct.actor.stat_cat.retrieve",
99 "open-ils.storage.ranged.actor.stat_cat_entry.search.stat_cat.atomic",
100 $orgid, $id )->gather(1) );
106 sub _flesh_copy_cat {
110 my $session = OpenSRF::AppSession->create("open-ils.storage");
111 my $cat = $session->request(
112 "open-ils.storage.direct.asset.stat_cat.retrieve",
117 "open-ils.storage.ranged.asset.stat_cat_entry.search.stat_cat.atomic",
118 $orgid, $id )->gather(1) );
125 sub _create_stat_cat {
126 my( $session, $stat_cat, $method) = @_;
127 warn "Creating new stat cat with name " . $stat_cat->name . "\n";
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"); }
135 warn "Stat cat create returned id $id\n";
140 sub _create_stat_entry {
141 my( $session, $stat_entry, $method) = @_;
142 warn "Creating new stat entry with value " . $stat_entry->value . "\n";
143 $stat_entry->clear_id();
144 my $req = $session->request($method, $stat_entry);
145 my $id = $req->gather(1);
147 throw OpenSRF::EX::ERROR
148 ("Error creating new stat cat entry"); }
150 warn "Stat cat entry create returned id $id\n";