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 $class = 'rof' if $type eq 'output';
48 my $flesh = {flesh => 1,flesh_fields => { $class => ['owner', 'share_with']}};
50 my $meth = "search_reporter_${type}_folder";
51 my $fs = $e->$meth( [{ owner => $e->requestor->id }, $flesh] );
54 my $o = $U->storagereq(
55 'open-ils.storage.actor.org_unit.full_path.atomic', $e->requestor->ws_ou);
56 push( @orgs, $_->id ) for @$o;
63 owner => { '!=' => $e->requestor->id }
74 __PACKAGE__->register_method(
75 api_name => 'open-ils.reporter.folder_data.retrieve',
76 method => 'retrieve_folder_data'
79 sub retrieve_folder_data {
80 my( $self, $conn, $auth, $type, $folderid, $limit ) = @_;
81 my $e = new_rstore_editor(authtoken=>$auth);
82 return $e->event unless $e->checkauth;
83 return $e->event unless $e->allowed('RUN_REPORTS');
84 my $meth = "search_reporter_${type}";
86 $class = 'rt' if $type eq 'template';
89 flesh_fields => { $class => ['owner']},
90 order_by => { $class => 'create_time DESC'}
92 $flesh->{limit} = $limit if $limit;
93 return $e->$meth([{ folder => $folderid }, $flesh]);
96 __PACKAGE__->register_method(
97 api_name => 'open-ils.reporter.schedule.retrieve_by_folder',
98 method => 'retrieve_schedules');
99 sub retrieve_schedules {
100 my( $self, $conn, $auth, $folderId, $limit ) = @_;
101 my $e = new_rstore_editor(authtoken=>$auth);
102 return $e->event unless $e->checkauth;
103 return $e->event unless $e->allowed('RUN_REPORTS');
105 my $search = { folder => $folderId };
107 { folder => $folderId },
108 { order_by => { rs => 'run_time DESC' } }
111 $query->[1]->{limit} = $limit if $limit;
112 return $e->search_reporter_schedule($query);
115 __PACKAGE__->register_method(
116 api_name => 'open-ils.reporter.schedule.retrieve',
117 method => 'retrieve_schedules');
118 sub retrieve_schedule {
119 my( $self, $conn, $auth, $sched_id ) = @_;
120 my $e = new_rstore_editor(authtoken=>$auth);
121 return $e->event unless $e->checkauth;
122 return $e->event unless $e->allowed('RUN_REPORTS');
123 my $s = $e->retrieve_reporter_schedule($sched_id)
129 __PACKAGE__->register_method(
130 api_name => 'open-ils.reporter.template.create',
131 method => 'create_template');
132 sub create_template {
133 my( $self, $conn, $auth, $template ) = @_;
134 my $e = new_rstore_editor(authtoken=>$auth, xact=>1);
135 return $e->die_event unless $e->checkauth;
136 return $e->die_event unless $e->allowed('RUN_REPORTS');
137 $template->owner($e->requestor->id);
138 my $tmpl = $e->create_reporter_template($template)
139 or return $e->die_event;
145 __PACKAGE__->register_method(
146 api_name => 'open-ils.reporter.report.create',
147 method => 'create_report');
149 my( $self, $conn, $auth, $report, $schedule ) = @_;
150 my $e = new_rstore_editor(authtoken=>$auth, xact=>1);
151 return $e->die_event unless $e->checkauth;
152 return $e->die_event unless $e->allowed('RUN_REPORTS');
153 $report->owner($e->requestor->id);
154 my $rpt = $e->create_reporter_report($report)
155 or return $e->die_event;
156 $schedule->report($rpt->id);
157 $schedule->runner($e->requestor->id);
158 $e->create_reporter_schedule($schedule) or return $e->die_event;
164 __PACKAGE__->register_method(
165 api_name => 'open-ils.scheduleer.schedule.create',
166 method => 'create_schedule');
167 sub create_schedule {
168 my( $self, $conn, $auth, $schedule ) = @_;
169 my $e = new_rstore_editor(authtoken=>$auth, xact=>1);
170 return $e->die_event unless $e->checkauth;
171 return $e->die_event unless $e->allowed('RUN_REPORTS');
172 my $sched = $e->create_reporter_schedule($schedule)
173 or return $e->die_event;
178 __PACKAGE__->register_method(
179 api_name => 'open-ils.reporter.template.retrieve',
180 method => 'retrieve_template');
181 sub retrieve_template {
182 my( $self, $conn, $auth, $id ) = @_;
183 my $e = new_rstore_editor(authtoken=>$auth);
184 return $e->event unless $e->checkauth;
185 return $e->event unless $e->allowed('RUN_REPORTS');
186 my $t = $e->retrieve_reporter_template($id)
192 __PACKAGE__->register_method(
193 api_name => 'open-ils.reporter.report.retrieve',
194 method => 'retrieve_report');
195 sub retrieve_report {
196 my( $self, $conn, $auth, $id ) = @_;
197 my $e = new_rstore_editor(authtoken=>$auth);
198 return $e->event unless $e->checkauth;
199 return $e->event unless $e->allowed('RUN_REPORTS');
200 my $r = $e->retrieve_reporter_report($id)
206 __PACKAGE__->register_method(
207 api_name => 'open-ils.reporter.template.update',
208 method => 'update_template');
209 sub update_template {
210 my( $self, $conn, $auth, $tmpl ) = @_;
211 my $e = new_rstore_editor(authtoken=>$auth, xact=>1);
212 return $e->die_event unless $e->checkauth;
213 return $e->die_event unless $e->allowed('RUN_REPORTS');
214 my $t = $e->retrieve_reporter_template($tmpl->id)
215 or return $e->die_event;
216 return 0 if $t->owner ne $e->requestor->id;
217 $e->update_reporter_template($tmpl)
218 or return $e->die_event;
224 __PACKAGE__->register_method(
225 api_name => 'open-ils.reporter.report.update',
226 method => 'update_report');
228 my( $self, $conn, $auth, $report ) = @_;
229 my $e = new_rstore_editor(authtoken=>$auth, xact=>1);
230 return $e->die_event unless $e->checkauth;
231 return $e->die_event unless $e->allowed('RUN_REPORTS');
232 my $r = $e->retrieve_reporter_report($report->id)
233 or return $e->die_event;
234 if( $r->owner ne $e->requestor->id ) {
238 $e->update_reporter_report($report)
239 or return $e->die_event;
245 __PACKAGE__->register_method(
246 api_name => 'open-ils.reporter.folder.update',
247 method => 'update_folder');
249 my( $self, $conn, $auth, $type, $folder ) = @_;
250 my $e = new_rstore_editor(authtoken=>$auth, xact=>1);
251 return $e->die_event unless $e->checkauth;
252 return $e->die_event unless $e->allowed('RUN_REPORTS');
253 my $meth = "retrieve_reporter_${type}_folder";
254 my $f = $e->$meth($folder->id) or return $e->die_event;
255 return 0 if $f->owner ne $e->requestor->id;
256 $meth = "update_reporter_${type}_folder";
257 $e->$meth($folder) or return $e->die_event;
263 __PACKAGE__->register_method(
264 api_name => 'open-ils.reporter.folder.delete',
265 method => 'delete_folder');
267 my( $self, $conn, $auth, $type, $folderId ) = @_;
268 my $e = new_rstore_editor(authtoken=>$auth, xact=>1);
269 return $e->die_event unless $e->checkauth;
270 return $e->die_event unless $e->allowed('RUN_REPORTS');
271 my $meth = "retrieve_reporter_${type}_folder";
272 my $f = $e->$meth($folderId) or return $e->die_event;
273 return 0 if $f->owner ne $e->requestor->id;
274 $meth = "delete_reporter_${type}_folder";
275 $e->$meth($f) or return $e->die_event;
281 __PACKAGE__->register_method(
282 api_name => 'open-ils.reporter.template.delete',
283 method => 'delete_template');
284 sub delete_template {
285 my( $self, $conn, $auth, $templateId ) = @_;
286 my $e = new_rstore_editor(authtoken=>$auth, xact=>1);
287 return $e->die_event unless $e->checkauth;
288 return $e->die_event unless $e->allowed('RUN_REPORTS');
290 my $t = $e->retrieve_reporter_template($templateId)
291 or return $e->die_event;
292 return 0 if $t->owner ne $e->requestor->id;
293 $e->delete_reporter_template($t) or return $e->die_event;
298 __PACKAGE__->register_method(
299 api_name => 'open-ils.reporter.report.delete',
300 method => 'delete_report');
302 my( $self, $conn, $auth, $reportId ) = @_;
303 my $e = new_rstore_editor(authtoken=>$auth, xact=>1);
304 return $e->die_event unless $e->checkauth;
305 return $e->die_event unless $e->allowed('RUN_REPORTS');
307 my $t = $e->retrieve_reporter_report($reportId)
308 or return $e->die_event;
309 return 0 if $t->owner ne $e->requestor->id;
310 $e->delete_reporter_report($t) or return $e->die_event;
316 __PACKAGE__->register_method(
317 api_name => 'open-ils.reporter.schedule.delete',
318 method => 'delete_schedule');
319 sub delete_schedule {
320 my( $self, $conn, $auth, $scheduleId ) = @_;
321 my $e = new_rstore_editor(authtoken=>$auth, xact=>1);
322 return $e->die_event unless $e->checkauth;
323 return $e->die_event unless $e->allowed('RUN_REPORTS');
325 my $t = $e->retrieve_reporter_schedule($scheduleId)
326 or return $e->die_event;
327 return 0 if $t->runner ne $e->requestor->id;
328 $e->delete_reporter_schedule($t) or return $e->die_event;
334 __PACKAGE__->register_method(
335 api_name => 'open-ils.reporter.template_has_reports',
336 method => 'has_reports');
338 my( $self, $conn, $auth, $templateId ) = @_;
339 my $e = new_rstore_editor(authtoken=>$auth);
340 return $e->die_event unless $e->checkauth;
341 return $e->die_event unless $e->allowed('RUN_REPORTS');
342 my $rpts = $e->search_reporter_report({template=>$templateId},{idlist=>1});
348 __PACKAGE__->register_method(
349 method => 'org_full_path',
350 api_name => 'open-ils.reporter.org_unit.full_path');
353 my( $self, $conn, $orgid ) = @_;
354 return $U->storagereq(
355 'open-ils.storage.actor.org_unit.full_path.atomic', $orgid );
361 __PACKAGE__->register_method(
362 method => 'magic_fetch_all',
363 api_name => 'open-ils.reporter.magic_fetch');
364 sub magic_fetch_all {
365 my( $self, $conn, $auth, $args ) = @_;
366 my $e = new_editor(authtoken => $auth);
367 return $e->event unless $e->checkauth;
368 return $e->event unless $e->allowed('RUN_REPORTS');
370 my $hint = $$args{hint};
372 # Find the class the iplements the given hint
374 $Fieldmapper::fieldmap->{$_}{hint} eq $hint } Fieldmapper->classes;
376 return undef unless $class->Selector;
378 $class =~ s/Fieldmapper:://og;
380 my $method = "retrieve_all_$class";
382 $logger->info("reporter.magic_fetch => $method");
384 return $e->$method();