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');
44 $class = 'rtf' if $type eq 'template';
45 my $flesh = {flesh => 1,flesh_fields => { $class => ['owner', 'share_with']}};
47 my $meth = "search_reporter_${type}_folder";
48 my $fs = $e->$meth( [{ owner => $e->requestor->id }, $flesh] );
51 my $oid = $e->requestor->ws_ou;
52 while( my ($o) = $U->fetch_org_unit($oid) ) {
54 push( @orgs, $o->id );
58 my $fs2 = $e->$meth([{shared => 't', share_with => \@orgs}, $flesh]);
65 __PACKAGE__->register_method(
66 api_name => 'open-ils.reporter.folder_data.retrieve',
67 method => 'retrieve_folder_data'
70 sub retrieve_folder_data {
71 my( $self, $conn, $auth, $type, $folderid ) = @_;
72 my $e = new_rstore_editor(authtoken=>$auth);
73 return $e->event unless $e->checkauth;
74 return $e->event unless $e->allowed('RUN_REPORTS');
75 my $meth = "search_reporter_${type}";
77 $class = 'rt' if $type eq 'template';
78 my $flesh = {flesh => 1,flesh_fields => { $class => ['owner']}};
79 return $e->$meth([{ folder => $folderid }, $flesh]);
83 __PACKAGE__->register_method(
84 api_name => 'open-ils.reporter.template.create',
85 method => 'create_template');
87 my( $self, $conn, $auth, $template ) = @_;
88 my $e = new_rstore_editor(authtoken=>$auth, xact=>1);
89 return $e->event unless $e->checkauth;
90 return $e->event unless $e->allowed('RUN_REPORTS');
91 $template->owner($e->requestor->id);
92 my $tmpl = $e->create_reporter_template($template)
93 or return $e->die_event;
99 __PACKAGE__->register_method(
100 api_name => 'open-ils.reporter.report.create',
101 method => 'create_report');
103 my( $self, $conn, $auth, $report ) = @_;
104 my $e = new_rstore_editor(authtoken=>$auth, xact=>1);
105 return $e->event unless $e->checkauth;
106 return $e->event unless $e->allowed('RUN_REPORTS');
107 $report->owner($e->requestor->id);
108 my $tmpl = $e->create_reporter_report($report)
109 or return $e->die_event;
115 __PACKAGE__->register_method(
116 api_name => 'open-ils.reporter.template.retrieve',
117 method => 'retrieve_template');
118 sub retrieve_template {
119 my( $self, $conn, $auth, $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 $t = $e->retrieve_reporter_template($id)
129 __PACKAGE__->register_method(
130 api_name => 'open-ils.reporter.report.retrieve',
131 method => 'retrieve_report');
132 sub retrieve_report {
133 my( $self, $conn, $auth, $id ) = @_;
134 my $e = new_rstore_editor(authtoken=>$auth);
135 return $e->event unless $e->checkauth;
136 return $e->event unless $e->allowed('RUN_REPORTS');
137 my $r = $e->retrieve_reporter_report($id)
143 __PACKAGE__->register_method(
144 api_name => 'open-ils.reporter.template.update',
145 method => 'update_template');
146 sub update_template {
147 my( $self, $conn, $auth, $tmpl ) = @_;
148 my $e = new_rstore_editor(authtoken=>$auth, xact=>1);
149 return $e->event unless $e->checkauth;
150 return $e->event unless $e->allowed('RUN_REPORTS');
151 my $t = $e->retrieve_reporter_template($tmpl->id)
152 or return $e->die_event;
153 return 0 if $t->owner ne $e->requestor->id;
154 $e->update_reporter_template($tmpl)
155 or return $e->die_event;
162 __PACKAGE__->register_method(
163 method => 'magic_fetch_all',
164 api_name => 'open-ils.reporter.magic_fetch');
165 sub magic_fetch_all {
166 my( $self, $conn, $auth, $args ) = @_;
167 my $e = new_editor(authtoken => $auth);
168 return $e->event unless $e->checkauth;
169 return $e->event unless $e->allowed('RUN_REPORTS');
171 my $hint = $$args{hint};
173 # Find the class the iplements the given hint
175 $Fieldmapper::fieldmap->{$_}{hint} eq $hint } Fieldmapper->classes;
177 return undef unless $class->Selector;
179 $class =~ s/Fieldmapper:://og;
181 my $method = "retrieve_all_$class";
183 $logger->info("reporter.magic_fetch => $method");
185 return $e->$method();