1 package OpenILS::Application::Reporter;
2 use base qw/OpenSRF::Application/;
3 use strict; use warnings;
4 use OpenSRF::Utils::Logger qw/$logger/;
5 use OpenILS::Utils::CStoreEditor qw/:funcs/;
6 use OpenILS::Utils::Fieldmapper;
7 use OpenILS::Application::AppUtils;
8 my $U = "OpenILS::Application::AppUtils";
11 __PACKAGE__->register_method(
12 api_name => 'open-ils.reporter.folder.create',
13 method => 'create_folder'
17 my( $self, $conn, $auth, $type, $folder ) = @_;
19 my $e = new_rstore_editor(xact=>1, authtoken=>$auth);
20 return $e->event unless $e->checkauth;
21 return $e->event unless $e->allowed('RUN_REPORTS');
23 $folder->owner($e->requestor->id);
24 my $meth = "create_reporter_${type}_folder";
25 $e->$meth($folder) or return $e->die_event;
32 __PACKAGE__->register_method(
33 api_name => 'open-ils.reporter.folder.visible.retrieve',
34 method => 'retrieve_visible_folders'
37 sub retrieve_visible_folders {
38 my( $self, $conn, $auth, $type ) = @_;
39 my $e = new_rstore_editor(authtoken=>$auth);
40 return $e->event unless $e->checkauth;
41 return $e->event unless $e->allowed('RUN_REPORTS');
43 my $meth = "search_reporter_${type}_folder";
44 my $fs = $e->$meth( { owner => $e->requestor->id } );
47 my $oid = $e->requestor->ws_ou;
48 while( my ($o) = $U->fetch_org_unit($oid) ) {
50 push( @orgs, $o->id );
54 my $fs2 = $e->$meth({shared => 't', share_with => \@orgs});
61 __PACKAGE__->register_method(
62 api_name => 'open-ils.reporter.folder_data.retrieve',
63 method => 'retrieve_folder_data'
66 sub retrieve_folder_data {
67 my( $self, $conn, $auth, $type, $folderid ) = @_;
68 my $e = new_rstore_editor(authtoken=>$auth);
69 return $e->event unless $e->checkauth;
70 return $e->event unless $e->allowed('RUN_REPORTS');
71 my $meth = "search_reporter_${type}";
72 return $e->$meth( { folder => $folderid } );
76 __PACKAGE__->register_method(
77 api_name => 'open-ils.reporter.template.create',
78 method => 'create_template');
80 my( $self, $conn, $auth, $template ) = @_;
81 my $e = new_rstore_editor(authtoken=>$auth, xact=>1);
82 return $e->event unless $e->checkauth;
83 return $e->event unless $e->allowed('RUN_REPORTS');
84 $template->owner($e->requestor->id);
85 my $tmpl = $e->create_reporter_template($template)
86 or return $e->die_event;
92 __PACKAGE__->register_method(
93 api_name => 'open-ils.reporter.report.create',
94 method => 'create_report');
96 my( $self, $conn, $auth, $report ) = @_;
97 my $e = new_rstore_editor(authtoken=>$auth, xact=>1);
98 return $e->event unless $e->checkauth;
99 return $e->event unless $e->allowed('RUN_REPORTS');
100 $report->owner($e->requestor->id);
101 my $tmpl = $e->create_reporter_report($report)
102 or return $e->die_event;
108 __PACKAGE__->register_method(
109 api_name => 'open-ils.reporter.template.retrieve',
110 method => 'retrieve_template');
111 sub retrieve_template {
112 my( $self, $conn, $auth, $id ) = @_;
113 my $e = new_rstore_editor(authtoken=>$auth);
114 return $e->event unless $e->checkauth;
115 return $e->event unless $e->allowed('RUN_REPORTS');
116 my $t = $e->retrieve_reporter_template($id)
122 __PACKAGE__->register_method(
123 api_name => 'open-ils.reporter.report.retrieve',
124 method => 'retrieve_report');
125 sub retrieve_report {
126 my( $self, $conn, $auth, $id ) = @_;
127 my $e = new_rstore_editor(authtoken=>$auth);
128 return $e->event unless $e->checkauth;
129 return $e->event unless $e->allowed('RUN_REPORTS');
130 my $r = $e->retrieve_reporter_report($id)
136 __PACKAGE__->register_method(
137 api_name => 'open-ils.reporter.template.update',
138 method => 'update_template');
139 sub update_template {
140 my( $self, $conn, $auth, $tmpl ) = @_;
141 my $e = new_rstore_editor(authtoken=>$auth, xact=>1);
142 return $e->event unless $e->checkauth;
143 return $e->event unless $e->allowed('RUN_REPORTS');
144 my $t = $e->retrieve_reporter_template($tmpl->id)
145 or return $e->die_event;
146 return 0 if $t->owner ne $e->requestor->id;
147 $e->update_reporter_template($tmpl)
148 or return $e->die_event;
155 __PACKAGE__->register_method(
156 method => 'magic_fetch_all',
157 api_name => 'open-ils.reporter.magic_fetch');
158 sub magic_fetch_all {
159 my( $self, $conn, $auth, $args ) = @_;
160 my $e = new_editor(authtoken => $auth);
161 return $e->event unless $e->checkauth;
162 return $e->event unless $e->allowed('RUN_REPORTS');
164 my $hint = $$args{hint};
166 # Find the class the iplements the given hint
168 $Fieldmapper::fieldmap->{$_}{hint} eq $hint } Fieldmapper->classes;
170 return undef unless $class->Selector;
172 $class =~ s/Fieldmapper:://og;
174 my $method = "retrieve_all_$class";
176 $logger->info("reporter.magic_fetch => $method");
178 return $e->$method();