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 ) = @_;
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';
87 my $flesh = {flesh => 1,flesh_fields => { $class => ['owner']}};
88 return $e->$meth([{ folder => $folderid }, $flesh]);
92 __PACKAGE__->register_method(
93 api_name => 'open-ils.reporter.template.create',
94 method => 'create_template');
96 my( $self, $conn, $auth, $template ) = @_;
97 my $e = new_rstore_editor(authtoken=>$auth, xact=>1);
98 return $e->die_event unless $e->checkauth;
99 return $e->die_event unless $e->allowed('RUN_REPORTS');
100 $template->owner($e->requestor->id);
101 my $tmpl = $e->create_reporter_template($template)
102 or return $e->die_event;
108 __PACKAGE__->register_method(
109 api_name => 'open-ils.reporter.report.create',
110 method => 'create_report');
112 my( $self, $conn, $auth, $report, $schedule ) = @_;
113 my $e = new_rstore_editor(authtoken=>$auth, xact=>1);
114 return $e->die_event unless $e->checkauth;
115 return $e->die_event unless $e->allowed('RUN_REPORTS');
116 $report->owner($e->requestor->id);
117 my $rpt = $e->create_reporter_report($report)
118 or return $e->die_event;
119 $schedule->report($rpt->id);
120 $schedule->runner($e->requestor->id);
121 $e->create_reporter_schedule($schedule) or return $e->die_event;
127 __PACKAGE__->register_method(
128 api_name => 'open-ils.scheduleer.schedule.create',
129 method => 'create_schedule');
130 sub create_schedule {
131 my( $self, $conn, $auth, $schedule ) = @_;
132 my $e = new_rstore_editor(authtoken=>$auth, xact=>1);
133 return $e->die_event unless $e->checkauth;
134 return $e->die_event unless $e->allowed('RUN_REPORTS');
135 my $sched = $e->create_reporter_schedule($schedule)
136 or return $e->die_event;
141 __PACKAGE__->register_method(
142 api_name => 'open-ils.reporter.template.retrieve',
143 method => 'retrieve_template');
144 sub retrieve_template {
145 my( $self, $conn, $auth, $id ) = @_;
146 my $e = new_rstore_editor(authtoken=>$auth);
147 return $e->event unless $e->checkauth;
148 return $e->event unless $e->allowed('RUN_REPORTS');
149 my $t = $e->retrieve_reporter_template($id)
155 __PACKAGE__->register_method(
156 api_name => 'open-ils.reporter.report.retrieve',
157 method => 'retrieve_report');
158 sub retrieve_report {
159 my( $self, $conn, $auth, $id ) = @_;
160 my $e = new_rstore_editor(authtoken=>$auth);
161 return $e->event unless $e->checkauth;
162 return $e->event unless $e->allowed('RUN_REPORTS');
163 my $r = $e->retrieve_reporter_report($id)
169 __PACKAGE__->register_method(
170 api_name => 'open-ils.reporter.template.update',
171 method => 'update_template');
172 sub update_template {
173 my( $self, $conn, $auth, $tmpl ) = @_;
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 $t = $e->retrieve_reporter_template($tmpl->id)
178 or return $e->die_event;
179 return 0 if $t->owner ne $e->requestor->id;
180 $e->update_reporter_template($tmpl)
181 or return $e->die_event;
187 __PACKAGE__->register_method(
188 api_name => 'open-ils.reporter.report.update',
189 method => 'update_report');
191 my( $self, $conn, $auth, $report ) = @_;
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 $r = $e->retrieve_reporter_report($report->id)
196 or return $e->die_event;
197 if( $r->owner ne $e->requestor->id ) {
201 $e->update_reporter_report($report)
202 or return $e->die_event;
208 __PACKAGE__->register_method(
209 api_name => 'open-ils.reporter.folder.update',
210 method => 'update_folder');
212 my( $self, $conn, $auth, $type, $folder ) = @_;
213 my $e = new_rstore_editor(authtoken=>$auth, xact=>1);
214 return $e->die_event unless $e->checkauth;
215 return $e->die_event unless $e->allowed('RUN_REPORTS');
216 my $meth = "retrieve_reporter_${type}_folder";
217 my $f = $e->$meth($folder->id) or return $e->die_event;
218 return 0 if $f->owner ne $e->requestor->id;
219 $meth = "update_reporter_${type}_folder";
220 $e->$meth($folder) or return $e->die_event;
226 __PACKAGE__->register_method(
227 api_name => 'open-ils.reporter.folder.delete',
228 method => 'delete_folder');
230 my( $self, $conn, $auth, $type, $folderId ) = @_;
231 my $e = new_rstore_editor(authtoken=>$auth, xact=>1);
232 return $e->die_event unless $e->checkauth;
233 return $e->die_event unless $e->allowed('RUN_REPORTS');
234 my $meth = "retrieve_reporter_${type}_folder";
235 my $f = $e->$meth($folderId) or return $e->die_event;
236 return 0 if $f->owner ne $e->requestor->id;
237 $meth = "delete_reporter_${type}_folder";
238 $e->$meth($f) or return $e->die_event;
244 __PACKAGE__->register_method(
245 api_name => 'open-ils.reporter.template.delete',
246 method => 'delete_template');
247 sub delete_template {
248 my( $self, $conn, $auth, $templateId ) = @_;
249 my $e = new_rstore_editor(authtoken=>$auth, xact=>1);
250 return $e->die_event unless $e->checkauth;
251 return $e->die_event unless $e->allowed('RUN_REPORTS');
253 my $t = $e->retrieve_reporter_template($templateId)
254 or return $e->die_event;
255 return 0 if $t->owner ne $e->requestor->id;
256 $e->delete_reporter_template($t) or return $e->die_event;
261 __PACKAGE__->register_method(
262 api_name => 'open-ils.reporter.report.delete',
263 method => 'delete_report');
265 my( $self, $conn, $auth, $reportId ) = @_;
266 my $e = new_rstore_editor(authtoken=>$auth, xact=>1);
267 return $e->die_event unless $e->checkauth;
268 return $e->die_event unless $e->allowed('RUN_REPORTS');
270 my $t = $e->retrieve_reporter_report($reportId)
271 or return $e->die_event;
272 return 0 if $t->owner ne $e->requestor->id;
273 $e->delete_reporter_report($t) or return $e->die_event;
279 __PACKAGE__->register_method(
280 api_name => 'open-ils.reporter.template_has_reports',
281 method => 'has_reports');
283 my( $self, $conn, $auth, $templateId ) = @_;
284 my $e = new_rstore_editor(authtoken=>$auth);
285 return $e->die_event unless $e->checkauth;
286 return $e->die_event unless $e->allowed('RUN_REPORTS');
287 my $rpts = $e->search_reporter_report({template=>$templateId},{idlist=>1});
293 __PACKAGE__->register_method(
294 method => 'org_full_path',
295 api_name => 'open-ils.reporter.org_unit.full_path');
298 my( $self, $conn, $orgid ) = @_;
299 return $U->storagereq(
300 'open-ils.storage.actor.org_unit.full_path.atomic', $orgid );
306 __PACKAGE__->register_method(
307 method => 'magic_fetch_all',
308 api_name => 'open-ils.reporter.magic_fetch');
309 sub magic_fetch_all {
310 my( $self, $conn, $auth, $args ) = @_;
311 my $e = new_editor(authtoken => $auth);
312 return $e->event unless $e->checkauth;
313 return $e->event unless $e->allowed('RUN_REPORTS');
315 my $hint = $$args{hint};
317 # Find the class the iplements the given hint
319 $Fieldmapper::fieldmap->{$_}{hint} eq $hint } Fieldmapper->classes;
321 return undef unless $class->Selector;
323 $class =~ s/Fieldmapper:://og;
325 my $method = "retrieve_all_$class";
327 $logger->info("reporter.magic_fetch => $method");
329 return $e->$method();