]> git.evergreen-ils.org Git - working/Evergreen.git/blob - Open-ILS/src/perlmods/lib/OpenILS/Application/Acq/Provider.pm
LP1615805 No inputs after submit in patron search (AngularJS)
[working/Evergreen.git] / Open-ILS / src / perlmods / lib / 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     authoritative => 1,
44     signature => {
45         desc => 'Retrieves a new provider',
46         params => [
47             {desc => 'Authentication token', type => 'string'},
48             {desc => 'provider ID', type => 'number'}
49         ],
50         return => {desc => 'The provider object on success, Event on failure'}
51     }
52 );
53
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);
61     return $provider;
62 }
63
64
65 __PACKAGE__->register_method(
66     method => 'retrieve_org_providers',
67     api_name    => 'open-ils.acq.provider.org.retrieve',
68     stream => 1,
69     signature => {
70         desc => 'Retrieves all the providers associated with an org unit that the requestor has access to see',
71         params => [
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'},
78         ],
79         return => {desc => 'The provider objects on success, empty array otherwise'}
80     }
81 );
82
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;
87
88     my $limit_perm = ($$options{limit_perm}) ? $$options{limit_perm} : 'ADMIN_PROVIDER';
89
90     return OpenILS::Event->new('BAD_PARAMS')
91         unless $limit_perm =~ /(ADMIN|MANAGE|VIEW)_PROVIDER/;
92
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});
95
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'}}
101         ])
102     };
103
104     return undef;
105 }
106
107 __PACKAGE__->register_method(
108     method => 'retrieve_provider_attr_def',
109     api_name    => 'open-ils.acq.lineitem_provider_attr_definition.provider.retrieve',
110     stream => 1,
111     signature => {
112         desc => 'Retrieves all of the lineitem_provider_attr_definition for a given provider',
113         params => [
114             {desc => 'Authentication token', type => 'string'},
115             {desc => 'Provider ID', type => 'number'}
116         ],
117         return => {desc => 'Streams a of lineitem_provider_attr_definition objects'}
118     }
119 );
120
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)
126         or return $e->event;
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));
130     }
131
132     return undef;
133 }
134
135 __PACKAGE__->register_method(
136     method => 'create_provider_attr_def',
137     api_name    => 'open-ils.acq.lineitem_provider_attr_definition.create',
138     signature => {
139         desc => 'Retrieves all of the lineitem_provider_attr_definition for a given provider',
140         params => [
141             {desc => 'Authentication token', type => 'string'},
142             {desc => 'Provider ID', type => 'number'}
143         ],
144         return => {desc => 'Streams a of lineitem_provider_attr_definition objects'}
145     }
146 );
147
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;
157     $e->commit;
158     return $attr_def->id;
159 }
160
161 __PACKAGE__->register_method(
162     method => 'delete_provider_attr_def',
163     api_name    => 'open-ils.acq.lineitem_provider_attr_definition.delete',
164     signature => {
165         desc => 'Deletes a lineitem_provider_attr_definition',
166         params => [
167             {desc => 'Authentication token', type => 'string'},
168             {desc => 'ID', type => 'number'}
169         ],
170         return => {desc => '1 on success, event on failure'}
171     }
172 );
173
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;
185     $e->commit;
186     return 1;
187 }
188
189 1;