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->die_event unless $e->checkauth;
21 return $e->die_event unless $e->allowed('RUN_REPORTS');
23 return 0 if $folder->owner ne $e->requestor->id;
25 $folder->owner($e->requestor->id);
26 my $meth = "create_reporter_${type}_folder";
27 $e->$meth($folder) or return $e->die_event;
34 __PACKAGE__->register_method(
35 api_name => 'open-ils.reporter.folder.visible.retrieve',
36 method => 'retrieve_visible_folders'
39 sub retrieve_visible_folders {
40 my( $self, $conn, $auth, $type ) = @_;
41 my $e = new_rstore_editor(authtoken=>$auth);
42 return $e->event unless $e->checkauth;
43 return $e->event unless $e->allowed('RUN_REPORTS');
46 $class = 'rtf' if $type eq 'template';
47 my $flesh = {flesh => 1,flesh_fields => { $class => ['owner', 'share_with']}};
49 my $meth = "search_reporter_${type}_folder";
50 my $fs = $e->$meth( [{ owner => $e->requestor->id }, $flesh] );
53 my $o = $U->storagereq(
54 'open-ils.storage.actor.org_unit.full_path.atomic', $e->requestor->ws_ou);
55 push( @orgs, $_->id ) for @$o;
62 owner => { '!=' => $e->requestor->id }
73 __PACKAGE__->register_method(
74 api_name => 'open-ils.reporter.folder_data.retrieve',
75 method => 'retrieve_folder_data'
78 sub retrieve_folder_data {
79 my( $self, $conn, $auth, $type, $folderid ) = @_;
80 my $e = new_rstore_editor(authtoken=>$auth);
81 return $e->event unless $e->checkauth;
82 return $e->event unless $e->allowed('RUN_REPORTS');
83 my $meth = "search_reporter_${type}";
85 $class = 'rt' if $type eq 'template';
86 my $flesh = {flesh => 1,flesh_fields => { $class => ['owner']}};
87 return $e->$meth([{ folder => $folderid }, $flesh]);
91 __PACKAGE__->register_method(
92 api_name => 'open-ils.reporter.template.create',
93 method => 'create_template');
95 my( $self, $conn, $auth, $template ) = @_;
96 my $e = new_rstore_editor(authtoken=>$auth, xact=>1);
97 return $e->die_event unless $e->checkauth;
98 return $e->die_event unless $e->allowed('RUN_REPORTS');
99 $template->owner($e->requestor->id);
100 my $tmpl = $e->create_reporter_template($template)
101 or return $e->die_event;
107 __PACKAGE__->register_method(
108 api_name => 'open-ils.reporter.report.create',
109 method => 'create_report');
111 my( $self, $conn, $auth, $report ) = @_;
112 my $e = new_rstore_editor(authtoken=>$auth, xact=>1);
113 return $e->die_event unless $e->checkauth;
114 return $e->die_event unless $e->allowed('RUN_REPORTS');
115 $report->owner($e->requestor->id);
116 my $tmpl = $e->create_reporter_report($report)
117 or return $e->die_event;
123 __PACKAGE__->register_method(
124 api_name => 'open-ils.reporter.template.retrieve',
125 method => 'retrieve_template');
126 sub retrieve_template {
127 my( $self, $conn, $auth, $id ) = @_;
128 my $e = new_rstore_editor(authtoken=>$auth);
129 return $e->event unless $e->checkauth;
130 return $e->event unless $e->allowed('RUN_REPORTS');
131 my $t = $e->retrieve_reporter_template($id)
137 __PACKAGE__->register_method(
138 api_name => 'open-ils.reporter.report.retrieve',
139 method => 'retrieve_report');
140 sub retrieve_report {
141 my( $self, $conn, $auth, $id ) = @_;
142 my $e = new_rstore_editor(authtoken=>$auth);
143 return $e->event unless $e->checkauth;
144 return $e->event unless $e->allowed('RUN_REPORTS');
145 my $r = $e->retrieve_reporter_report($id)
151 __PACKAGE__->register_method(
152 api_name => 'open-ils.reporter.template.update',
153 method => 'update_template');
154 sub update_template {
155 my( $self, $conn, $auth, $tmpl ) = @_;
156 my $e = new_rstore_editor(authtoken=>$auth, xact=>1);
157 return $e->die_event unless $e->checkauth;
158 return $e->die_event unless $e->allowed('RUN_REPORTS');
159 my $t = $e->retrieve_reporter_template($tmpl->id)
160 or return $e->die_event;
161 return 0 if $t->owner ne $e->requestor->id;
162 $e->update_reporter_template($tmpl)
163 or return $e->die_event;
169 __PACKAGE__->register_method(
170 api_name => 'open-ils.reporter.folder.update',
171 method => 'update_folder');
173 my( $self, $conn, $auth, $type, $folder ) = @_;
174 my $e = new_rstore_editor(authtoken=>$auth, xact=>1);
175 return $e->die_event unless $e->checkauth;
176 return $e->die_event unless $e->allowed('RUN_REPORTS');
177 my $meth = "retrieve_reporter_${type}_folder";
178 my $f = $e->$meth($folder->id) or return $e->die_event;
179 return 0 if $f->owner ne $e->requestor->id;
180 $meth = "update_reporter_${type}_folder";
181 $e->$meth($folder) or return $e->die_event;
187 __PACKAGE__->register_method(
188 api_name => 'open-ils.reporter.folder.delete',
189 method => 'delete_folder');
191 my( $self, $conn, $auth, $type, $folderId ) = @_;
192 my $e = new_rstore_editor(authtoken=>$auth, xact=>1);
193 return $e->die_event unless $e->checkauth;
194 return $e->die_event unless $e->allowed('RUN_REPORTS');
195 my $meth = "retrieve_reporter_${type}_folder";
196 my $f = $e->$meth($folderId) or return $e->die_event;
197 return 0 if $f->owner ne $e->requestor->id;
198 $meth = "delete_reporter_${type}_folder";
199 $e->$meth($f) or return $e->die_event;
205 __PACKAGE__->register_method(
206 api_name => 'open-ils.reporter.template.delete',
207 method => 'delete_template');
208 sub delete_template {
209 my( $self, $conn, $auth, $templateId ) = @_;
210 my $e = new_rstore_editor(authtoken=>$auth, xact=>1);
211 return $e->die_event unless $e->checkauth;
212 return $e->die_event unless $e->allowed('RUN_REPORTS');
214 my $t = $e->retrieve_reporter_template($templateId)
215 or return $e->die_event;
216 return 0 if $t->owner ne $e->requestor->id;
217 $e->delete_reporter_template($t) or return $e->die_event;
222 __PACKAGE__->register_method(
223 api_name => 'open-ils.reporter.report.delete',
224 method => 'delete_report');
226 my( $self, $conn, $auth, $reportId ) = @_;
227 my $e = new_rstore_editor(authtoken=>$auth, xact=>1);
228 return $e->die_event unless $e->checkauth;
229 return $e->die_event unless $e->allowed('RUN_REPORTS');
231 my $t = $e->retrieve_reporter_report($reportId)
232 or return $e->die_event;
233 return 0 if $t->owner ne $e->requestor->id;
234 $e->delete_reporter_report($t) or return $e->die_event;
240 __PACKAGE__->register_method(
241 api_name => 'open-ils.reporter.template_has_reports',
242 method => 'has_reports');
244 my( $self, $conn, $auth, $templateId ) = @_;
245 my $e = new_rstore_editor(authtoken=>$auth);
246 return $e->die_event unless $e->checkauth;
247 return $e->die_event unless $e->allowed('RUN_REPORTS');
248 my $rpts = $e->search_reporter_report({template=>$templateId},{idlist=>1});
254 __PACKAGE__->register_method(
255 method => 'org_full_path',
256 api_name => 'open-ils.reporter.org_unit.full_path');
259 my( $self, $conn, $orgid ) = @_;
260 return $U->storagereq(
261 'open-ils.storage.actor.org_unit.full_path.atomic', $orgid );
267 __PACKAGE__->register_method(
268 method => 'magic_fetch_all',
269 api_name => 'open-ils.reporter.magic_fetch');
270 sub magic_fetch_all {
271 my( $self, $conn, $auth, $args ) = @_;
272 my $e = new_editor(authtoken => $auth);
273 return $e->event unless $e->checkauth;
274 return $e->event unless $e->allowed('RUN_REPORTS');
276 my $hint = $$args{hint};
278 # Find the class the iplements the given hint
280 $Fieldmapper::fieldmap->{$_}{hint} eq $hint } Fieldmapper->classes;
282 return undef unless $class->Selector;
284 $class =~ s/Fieldmapper:://og;
286 my $method = "retrieve_all_$class";
288 $logger->info("reporter.magic_fetch => $method");
290 return $e->$method();