]> git.evergreen-ils.org Git - Evergreen.git/blob - Open-ILS/src/perlmods/OpenILS/Application/Reporter.pm
updated folder retrieval to fetch shared folders that the requestor
[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 $meth = "search_reporter_${type}_folder";
44         my $fs = $e->$meth( { owner => $e->requestor->id } );
45
46         my @orgs;
47         my $oid = $e->requestor->ws_ou; 
48         while( my ($o) = $U->fetch_org_unit($oid) ) {
49                 last unless $o;
50                 push( @orgs, $o->id );
51                 $oid = $o->parent_ou;
52         }
53
54         my $fs2 = $e->$meth({shared => 't', share_with => \@orgs});
55         push( @$fs, @$fs2);
56         return $fs;
57 }
58
59
60
61 __PACKAGE__->register_method(
62         api_name => 'open-ils.reporter.folder_data.retrieve',
63         method => 'retrieve_folder_data'
64 );
65
66 sub retrieve_folder_data {
67         my( $self, $conn, $auth, $type, $folderid ) = @_;
68         my $e = new_rstore_editor(authtoken=>$auth);
69         return $e->event unless $e->checkauth;
70         return $e->event unless $e->allowed('RUN_REPORTS');
71         my $meth = "search_reporter_${type}";
72         return $e->$meth( { folder => $folderid } );
73 }
74
75
76 __PACKAGE__->register_method(
77         api_name => 'open-ils.reporter.template.create',
78         method => 'create_template');
79 sub create_template {
80         my( $self, $conn, $auth, $template ) = @_;
81         my $e = new_rstore_editor(authtoken=>$auth, xact=>1);
82         return $e->event unless $e->checkauth;
83         return $e->event unless $e->allowed('RUN_REPORTS');
84         $template->owner($e->requestor->id);
85         my $tmpl = $e->create_reporter_template($template)
86                 or return $e->die_event;
87         $e->commit;
88         return $tmpl;
89 }
90
91
92 __PACKAGE__->register_method(
93         api_name => 'open-ils.reporter.report.create',
94         method => 'create_report');
95 sub create_report {
96         my( $self, $conn, $auth, $report ) = @_;
97         my $e = new_rstore_editor(authtoken=>$auth, xact=>1);
98         return $e->event unless $e->checkauth;
99         return $e->event unless $e->allowed('RUN_REPORTS');
100         $report->owner($e->requestor->id);
101         my $tmpl = $e->create_reporter_report($report)
102                 or return $e->die_event;
103         $e->commit;
104         return $tmpl;
105 }
106
107
108 __PACKAGE__->register_method(
109         api_name => 'open-ils.reporter.template.retrieve',
110         method => 'retrieve_template');
111 sub retrieve_template {
112         my( $self, $conn, $auth, $id ) = @_;
113         my $e = new_rstore_editor(authtoken=>$auth);
114         return $e->event unless $e->checkauth;
115         return $e->event unless $e->allowed('RUN_REPORTS');
116         my $t = $e->retrieve_reporter_template($id) 
117                 or return $e->event;
118         return $t;
119 }
120
121
122 __PACKAGE__->register_method(
123         api_name => 'open-ils.reporter.report.retrieve',
124         method => 'retrieve_report');
125 sub retrieve_report {
126         my( $self, $conn, $auth, $id ) = @_;
127         my $e = new_rstore_editor(authtoken=>$auth);
128         return $e->event unless $e->checkauth;
129         return $e->event unless $e->allowed('RUN_REPORTS');
130         my $r = $e->retrieve_reporter_report($id) 
131                 or return $e->event;
132         return $r;
133 }
134
135
136 __PACKAGE__->register_method(
137         api_name => 'open-ils.reporter.template.update',
138         method => 'update_template');
139 sub update_template {
140         my( $self, $conn, $auth, $tmpl ) = @_;
141         my $e = new_rstore_editor(authtoken=>$auth, xact=>1);
142         return $e->event unless $e->checkauth;
143         return $e->event unless $e->allowed('RUN_REPORTS');
144         my $t = $e->retrieve_reporter_template($tmpl->id)
145                 or return $e->die_event;
146         return 0 if $t->owner ne $e->requestor->id;
147         $e->update_reporter_template($tmpl)
148                 or return $e->die_event;
149         $e->commit;
150         return 1;
151 }
152
153
154
155 __PACKAGE__->register_method(
156         method => 'magic_fetch_all',
157         api_name => 'open-ils.reporter.magic_fetch');
158 sub magic_fetch_all {
159         my( $self, $conn, $auth, $args ) = @_;
160         my $e = new_editor(authtoken => $auth);
161         return $e->event unless $e->checkauth;
162         return $e->event unless $e->allowed('RUN_REPORTS');
163
164         my $hint = $$args{hint};
165
166         # Find the class the iplements the given hint
167         my ($class) = grep { 
168                 $Fieldmapper::fieldmap->{$_}{hint} eq $hint } Fieldmapper->classes;
169
170         return undef unless $class->Selector;
171
172         $class =~ s/Fieldmapper:://og;
173         $class =~ s/::/_/og;
174         my $method = "retrieve_all_$class";
175
176         $logger->info("reporter.magic_fetch => $method");
177
178         return $e->$method();
179 }
180
181
182 1;