]> git.evergreen-ils.org Git - working/Evergreen.git/blob - Open-ILS/src/perlmods/OpenILS/Application/Acq/Provider.pm
Merging acq-experiment to trunk, since rel_1_4 has been branched.
[working/Evergreen.git] / Open-ILS / src / perlmods / OpenILS / Application / Acq / Provider.pm
1 package OpenILS::Application::Acq::Provider;
2 use base qw/OpenILS::Application/;
3 use strict; use warnings;
4
5 use OpenILS::Event;
6 use OpenILS::Const qw/:const/;
7 use OpenSRF::Utils::Logger qw(:logger);
8 use OpenILS::Utils::Fieldmapper;
9 use OpenILS::Utils::CStoreEditor q/:funcs/;
10 use OpenSRF::Utils::SettingsClient;
11 use OpenILS::Application::AppUtils;
12
13 my $U = 'OpenILS::Application::AppUtils';
14
15 __PACKAGE__->register_method(
16         method => 'create_provider',
17         api_name        => 'open-ils.acq.provider.create',
18         signature => {
19         desc => 'Creates a new provider',
20         params => [
21             {desc => 'Authentication token', type => 'string'},
22             {desc => 'provider object to create', type => 'object'}
23         ],
24         return => {desc => 'The ID of the new provider'}
25     }
26 );
27
28 sub create_provider {
29     my($self, $conn, $auth, $provider) = @_;
30     my $e = new_editor(authtoken=>$auth, xact=>1);
31     return $e->die_event unless $e->checkauth;
32     return $e->die_event unless $e->allowed('ADMIN_PROVIDER', $provider->owner);
33     $e->create_acq_provider($provider) or return $e->die_event;
34     $e->commit;
35     return $provider->id;
36 }
37
38
39
40 __PACKAGE__->register_method(
41         method => 'retrieve_provider',
42         api_name        => 'open-ils.acq.provider.retrieve',
43         signature => {
44         desc => 'Retrieves a new provider',
45         params => [
46             {desc => 'Authentication token', type => 'string'},
47             {desc => 'provider ID', type => 'number'}
48         ],
49         return => {desc => 'The provider object on success, Event on failure'}
50     }
51 );
52
53 sub retrieve_provider {
54     my($self, $conn, $auth, $provider_id) = @_;
55     my $e = new_editor(authtoken=>$auth);
56     return $e->event unless $e->checkauth;
57     my $provider = $e->retrieve_acq_provider($provider_id) or return $e->event;
58     return $e->event unless $e->allowed(
59         ['ADMIN_PROVIDER', 'MANAGE_PROVIDER', 'VIEW_PROVIDER'], $provider->owner, $provider);
60     return $provider;
61 }
62
63
64 __PACKAGE__->register_method(
65         method => 'retrieve_org_providers',
66         api_name        => 'open-ils.acq.provider.org.retrieve',
67     stream => 1,
68         signature => {
69         desc => 'Retrieves all the providers associated with an org unit that the requestor has access to see',
70         params => [
71             {desc => 'Authentication token', type => 'string'},
72             {desc => 'List of org Unit IDs.  If no IDs are provided, this method returns the 
73                 full set of funding sources this user has permission to view', type => 'number'},
74             {desc => q/Limiting permission.  this permission is used find the work-org tree from which  
75                 the list of orgs is generated if no org ids are provided.  
76                 The default is ADMIN_PROVIDER/, type => 'string'},
77         ],
78         return => {desc => 'The provider objects on success, empty array otherwise'}
79     }
80 );
81
82 sub retrieve_org_providers {
83     my($self, $conn, $auth, $org_id_list, $options) = @_;
84     my $e = new_editor(authtoken=>$auth);
85     return $e->event unless $e->checkauth;
86
87     my $limit_perm = ($$options{limit_perm}) ? $$options{limit_perm} : 'ADMIN_PROVIDER';
88
89     return OpenILS::Event->new('BAD_PARAMS')
90         unless $limit_perm =~ /(ADMIN|MANAGE|VIEW)_PROVIDER/;
91
92     my $org_ids = ($org_id_list and @$org_id_list) ? $org_id_list :
93         $U->find_highest_work_orgs($e, $limit_perm, {descendants =>1});
94
95     return [] unless @$org_ids;
96     $conn->respond($_) for @{$e->search_acq_provider({owner => $org_ids})};
97
98     return undef;
99 }
100
101 __PACKAGE__->register_method(
102         method => 'retrieve_provider_attr_def',
103         api_name        => 'open-ils.acq.lineitem_provider_attr_definition.provider.retrieve',
104     stream => 1,
105         signature => {
106         desc => 'Retrieves all of the lineitem_provider_attr_definition for a given provider',
107         params => [
108             {desc => 'Authentication token', type => 'string'},
109             {desc => 'Provider ID', type => 'number'}
110         ],
111         return => {desc => 'Streams a of lineitem_provider_attr_definition objects'}
112     }
113 );
114
115 sub retrieve_provider_attr_def {
116     my($self, $conn, $auth, $prov_id) = @_;
117     my $e = new_editor(authtoken=>$auth);
118     return $e->event unless $e->checkauth;
119     my $provider = $e->retrieve_acq_provider($prov_id)
120         or return $e->event;
121     return $e->event unless $e->allowed('ADMIN_PROVIDER', $provider->owner);
122     for my $id (@{$e->search_acq_lineitem_provider_attr_definition({provider=>$prov_id},{idlist=>1})}) {
123         $conn->respond($e->retrieve_acq_lineitem_provider_attr_definition($id));
124     }
125
126     return undef;
127 }
128
129 __PACKAGE__->register_method(
130         method => 'create_provider_attr_def',
131         api_name        => 'open-ils.acq.lineitem_provider_attr_definition.create',
132         signature => {
133         desc => 'Retrieves all of the lineitem_provider_attr_definition for a given provider',
134         params => [
135             {desc => 'Authentication token', type => 'string'},
136             {desc => 'Provider ID', type => 'number'}
137         ],
138         return => {desc => 'Streams a of lineitem_provider_attr_definition objects'}
139     }
140 );
141
142 sub create_provider_attr_def {
143     my($self, $conn, $auth, $attr_def) = @_;
144     my $e = new_editor(authtoken=>$auth, xact=>1);
145     return $e->die_event unless $e->checkauth;
146     my $provider = $e->retrieve_acq_provider($attr_def->provider)
147         or return $e->die_event;
148     return $e->die_event unless $e->allowed('ADMIN_PROVIDER', $provider->owner);
149     $e->create_acq_lineitem_provider_attr_definition($attr_def)
150         or return $e->die_event;
151     $e->commit;
152     return $attr_def->id;
153 }
154
155 __PACKAGE__->register_method(
156         method => 'delete_provider_attr_def',
157         api_name        => 'open-ils.acq.lineitem_provider_attr_definition.delete',
158         signature => {
159         desc => 'Deletes a lineitem_provider_attr_definition',
160         params => [
161             {desc => 'Authentication token', type => 'string'},
162             {desc => 'ID', type => 'number'}
163         ],
164         return => {desc => '1 on success, event on failure'}
165     }
166 );
167
168 sub delete_provider_attr_def {
169     my($self, $conn, $auth, $id) = @_;
170     my $e = new_editor(authtoken=>$auth, xact=>1);
171     return $e->die_event unless $e->checkauth;
172     my $attr_def = $e->retrieve_acq_lineitem_provider_attr_definition($id)
173         or return $e->die_event;
174     my $provider = $e->retrieve_acq_provider($attr_def->provider)
175         or return $e->die_event;
176     return $e->die_event unless $e->allowed('ADMIN_PROVIDER', $provider->owner);
177     $e->delete_acq_lineitem_provider_attr_definition($attr_def)
178         or return $e->die_event;
179     $e->commit;
180     return 1;
181 }
182
183 1;