1 package OpenILS::Application::Acq::Provider;
2 use base qw/OpenILS::Application/;
3 use strict; use warnings;
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;
13 my $U = 'OpenILS::Application::AppUtils';
15 __PACKAGE__->register_method(
16 method => 'create_provider',
17 api_name => 'open-ils.acq.provider.create',
19 desc => 'Creates a new provider',
21 {desc => 'Authentication token', type => 'string'},
22 {desc => 'provider object to create', type => 'object'}
24 return => {desc => 'The ID of the new 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;
40 __PACKAGE__->register_method(
41 method => 'retrieve_provider',
42 api_name => 'open-ils.acq.provider.retrieve',
45 desc => 'Retrieves a new provider',
47 {desc => 'Authentication token', type => 'string'},
48 {desc => 'provider ID', type => 'number'}
50 return => {desc => 'The provider object on success, Event on failure'}
54 sub retrieve_provider {
55 my($self, $conn, $auth, $provider_id) = @_;
56 my $e = new_editor(authtoken=>$auth);
57 return $e->event unless $e->checkauth;
58 my $provider = $e->retrieve_acq_provider($provider_id) or return $e->event;
59 return $e->event unless $e->allowed(
60 ['ADMIN_PROVIDER', 'MANAGE_PROVIDER', 'VIEW_PROVIDER'], $provider->owner, $provider);
65 __PACKAGE__->register_method(
66 method => 'retrieve_org_providers',
67 api_name => 'open-ils.acq.provider.org.retrieve',
70 desc => 'Retrieves all the providers associated with an org unit that the requestor has access to see',
72 {desc => 'Authentication token', type => 'string'},
73 {desc => 'List of org Unit IDs. If no IDs are provided, this method returns the
74 full set of funding sources this user has permission to view', type => 'number'},
75 {desc => q/Limiting permission. this permission is used find the work-org tree from which
76 the list of orgs is generated if no org ids are provided.
77 The default is ADMIN_PROVIDER/, type => 'string'},
79 return => {desc => 'The provider objects on success, empty array otherwise'}
83 sub retrieve_org_providers {
84 my($self, $conn, $auth, $org_id_list, $options) = @_;
85 my $e = new_editor(authtoken=>$auth);
86 return $e->event unless $e->checkauth;
88 my $limit_perm = ($$options{limit_perm}) ? $$options{limit_perm} : 'ADMIN_PROVIDER';
90 return OpenILS::Event->new('BAD_PARAMS')
91 unless $limit_perm =~ /(ADMIN|MANAGE|VIEW)_PROVIDER/;
93 my $org_ids = ($org_id_list and @$org_id_list) ? $org_id_list :
94 $U->user_has_work_perm_at($e, $limit_perm, {descendants =>1});
96 return [] unless @$org_ids;
97 $conn->respond($_) for @{
98 $e->search_acq_provider([
99 {owner => $org_ids, active => 't'},
100 {order_by => {acqpro => 'code'}}
107 __PACKAGE__->register_method(
108 method => 'retrieve_provider_attr_def',
109 api_name => 'open-ils.acq.lineitem_provider_attr_definition.provider.retrieve',
112 desc => 'Retrieves all of the lineitem_provider_attr_definition for a given provider',
114 {desc => 'Authentication token', type => 'string'},
115 {desc => 'Provider ID', type => 'number'}
117 return => {desc => 'Streams a of lineitem_provider_attr_definition objects'}
121 sub retrieve_provider_attr_def {
122 my($self, $conn, $auth, $prov_id) = @_;
123 my $e = new_editor(authtoken=>$auth);
124 return $e->event unless $e->checkauth;
125 my $provider = $e->retrieve_acq_provider($prov_id)
127 return $e->event unless $e->allowed('ADMIN_PROVIDER', $provider->owner);
128 for my $id (@{$e->search_acq_lineitem_provider_attr_definition({provider=>$prov_id},{idlist=>1})}) {
129 $conn->respond($e->retrieve_acq_lineitem_provider_attr_definition($id));
135 __PACKAGE__->register_method(
136 method => 'create_provider_attr_def',
137 api_name => 'open-ils.acq.lineitem_provider_attr_definition.create',
139 desc => 'Retrieves all of the lineitem_provider_attr_definition for a given provider',
141 {desc => 'Authentication token', type => 'string'},
142 {desc => 'Provider ID', type => 'number'}
144 return => {desc => 'Streams a of lineitem_provider_attr_definition objects'}
148 sub create_provider_attr_def {
149 my($self, $conn, $auth, $attr_def) = @_;
150 my $e = new_editor(authtoken=>$auth, xact=>1);
151 return $e->die_event unless $e->checkauth;
152 my $provider = $e->retrieve_acq_provider($attr_def->provider)
153 or return $e->die_event;
154 return $e->die_event unless $e->allowed('ADMIN_PROVIDER', $provider->owner);
155 $e->create_acq_lineitem_provider_attr_definition($attr_def)
156 or return $e->die_event;
158 return $attr_def->id;
161 __PACKAGE__->register_method(
162 method => 'delete_provider_attr_def',
163 api_name => 'open-ils.acq.lineitem_provider_attr_definition.delete',
165 desc => 'Deletes a lineitem_provider_attr_definition',
167 {desc => 'Authentication token', type => 'string'},
168 {desc => 'ID', type => 'number'}
170 return => {desc => '1 on success, event on failure'}
174 sub delete_provider_attr_def {
175 my($self, $conn, $auth, $id) = @_;
176 my $e = new_editor(authtoken=>$auth, xact=>1);
177 return $e->die_event unless $e->checkauth;
178 my $attr_def = $e->retrieve_acq_lineitem_provider_attr_definition($id)
179 or return $e->die_event;
180 my $provider = $e->retrieve_acq_provider($attr_def->provider)
181 or return $e->die_event;
182 return $e->die_event unless $e->allowed('ADMIN_PROVIDER', $provider->owner);
183 $e->delete_acq_lineitem_provider_attr_definition($attr_def)
184 or return $e->die_event;