]> git.evergreen-ils.org Git - Evergreen.git/blob - Open-ILS/src/perlmods/OpenILS/Application/Reporter.pm
added some report fleshing
[Evergreen.git] / Open-ILS / src / perlmods / OpenILS / Application / Reporter.pm
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";
9
10
11 __PACKAGE__->register_method(
12         api_name => 'open-ils.reporter.folder.create',
13         method => 'create_folder'
14 );
15
16 sub create_folder {
17         my( $self, $conn, $auth, $type, $folder ) = @_;
18
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');
22
23         $folder->owner($e->requestor->id);
24         my $meth = "create_reporter_${type}_folder";
25         $e->$meth($folder) or return $e->die_event;
26         $e->commit;
27
28         return $folder->id;
29 }
30
31
32 __PACKAGE__->register_method(
33         api_name => 'open-ils.reporter.folder.visible.retrieve',
34         method => 'retrieve_visible_folders'
35 );
36
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');
42
43         my $class = 'rrf';
44         $class = 'rtf' if $type eq 'template';
45         my $flesh = {flesh => 1,flesh_fields => { $class => ['owner', 'share_with']}};
46
47         my $meth = "search_reporter_${type}_folder";
48         my $fs = $e->$meth( [{ owner => $e->requestor->id }, $flesh] );
49
50         my @orgs;
51         my $oid = $e->requestor->ws_ou; 
52         while( my ($o) = $U->fetch_org_unit($oid) ) {
53                 last unless $o;
54                 push( @orgs, $o->id );
55                 $oid = $o->parent_ou;
56         }
57
58         my $fs2 = $e->$meth([{shared => 't', share_with => \@orgs}, $flesh]);
59         push( @$fs, @$fs2);
60         return $fs;
61 }
62
63
64
65 __PACKAGE__->register_method(
66         api_name => 'open-ils.reporter.folder_data.retrieve',
67         method => 'retrieve_folder_data'
68 );
69
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}";
76         my $class = 'rr';
77         $class = 'rt' if $type eq 'template';
78         my $flesh = {flesh => 1,flesh_fields => { $class => ['owner']}};
79         return $e->$meth([{ folder => $folderid }, $flesh]); 
80 }
81
82
83 __PACKAGE__->register_method(
84         api_name => 'open-ils.reporter.template.create',
85         method => 'create_template');
86 sub 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;
94         $e->commit;
95         return $tmpl;
96 }
97
98
99 __PACKAGE__->register_method(
100         api_name => 'open-ils.reporter.report.create',
101         method => 'create_report');
102 sub 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;
110         $e->commit;
111         return $tmpl;
112 }
113
114
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) 
124                 or return $e->event;
125         return $t;
126 }
127
128
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) 
138                 or return $e->event;
139         return $r;
140 }
141
142
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;
156         $e->commit;
157         return 1;
158 }
159
160
161
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');
170
171         my $hint = $$args{hint};
172
173         # Find the class the iplements the given hint
174         my ($class) = grep { 
175                 $Fieldmapper::fieldmap->{$_}{hint} eq $hint } Fieldmapper->classes;
176
177         return undef unless $class->Selector;
178
179         $class =~ s/Fieldmapper:://og;
180         $class =~ s/::/_/og;
181         my $method = "retrieve_all_$class";
182
183         $logger->info("reporter.magic_fetch => $method");
184
185         return $e->$method();
186 }
187
188
189 1;