]> git.evergreen-ils.org Git - Evergreen.git/blob - Open-ILS/src/perlmods/lib/OpenILS/Application/Actor/UserGroups.pm
LP#1281750 Ignore deleted users in usrgroup info APIs
[Evergreen.git] / Open-ILS / src / perlmods / lib / OpenILS / Application / Actor / UserGroups.pm
1 package OpenILS::Application::Actor::UserGroups;
2 use base 'OpenILS::Application';
3 use strict; use warnings;
4 use OpenILS::Application::AppUtils;
5 use OpenILS::Utils::CStoreEditor q/:funcs/;
6 use OpenSRF::Utils::Logger q/$logger/;
7 use OpenSRF::EX qw(:try);
8 my $U = "OpenILS::Application::AppUtils";
9
10 sub initialize { return 1; }
11
12
13
14 __PACKAGE__->register_method(
15         method => 'group_money_summary',
16         api_name        => 'open-ils.actor.usergroup.members.balance_owed',
17     authoritative => 1,
18         signature       => q/
19         /
20 );
21
22 sub group_money_summary {
23         my($self, $conn, $auth, $group_id) = @_;
24         my $e = new_editor(authtoken=>$auth);
25         return $e->event unless $e->checkauth;
26         return $e->event unless $e->allowed('VIEW_USER');
27
28     my $users = $e->search_actor_user(
29         {usrgroup => $group_id, deleted => 'f'}, {idlist => 1});
30     my @mous;
31
32     for my $uid ( @$users ) {
33         push @mous, @{$e->json_query(
34             {
35                 select => {mous => ['usr', 'balance_owed']},
36                 from => 'mous',
37                 where => { usr => $uid }
38             }
39         )};
40     }
41
42     return \@mous;
43 }
44
45
46 __PACKAGE__->register_method(
47         method => 'get_users_from_usergroup',
48         api_name        => 'open-ils.actor.usergroup.members.retrieve',
49     authoritative => 1,
50         signature       => q/
51                 Returns a list of ids for users that are in the given usergroup
52         /
53 );
54
55 sub get_users_from_usergroup {
56         my( $self, $conn, $auth, $usergroup ) = @_;
57         my $e = new_editor(authtoken=>$auth);
58         return $e->event unless $e->checkauth;
59         return $e->event unless $e->allowed('VIEW_USER'); # XXX reley on editor perm
60     return $e->search_actor_user(
61         {usrgroup => $usergroup, deleted => 'f'}, {idlist => 1});
62 }
63
64
65
66 __PACKAGE__->register_method(
67         method => 'get_leaders_from_usergroup',
68         api_name        => 'open-ils.actor.usergroup.leaders.retrieve',
69         signature       => q/
70                 Returns a list of ids for users that are leaders of the given usergroup
71         /
72 );
73
74 sub get_leaders_from_usergroup {
75         my( $self, $conn, $auth, $usergroup ) = @_;
76         my $e = new_editor(authtoken=>$auth);
77         return $e->event unless $e->checkauth;
78         return $e->event unless $e->allowed('VIEW_USER'); # XXX reley on editor perm
79     my $users = $e->search_actor_user(
80         {usrgroup => $usergroup, deleted => 'f'})
81                 or return $e->event;
82
83         my @res;
84         for my $u (@$users) {
85                 push( @res, $u->id ) if $u->master_account;
86         }
87
88         return \@res;
89 }
90
91
92
93 __PACKAGE__->register_method(
94         method => 'get_address_members',
95         api_name        => 'open-ils.actor.address.members',
96         signature       => q/
97                 Returns a list of ids for users that link to the given address
98                 @param auth
99                 @param addrid The address id
100         /
101 );
102
103 sub get_address_members {
104         my( $self, $conn, $auth, $addrid ) = @_;
105
106         my $e = new_editor(authtoken=>$auth);
107         return $e->event unless $e->checkauth;
108         return $e->event unless $e->allowed('VIEW_USER'); # XXX reley on editor perm
109
110         my $ad = $e->retrieve_actor_user_address($addrid) or return $e->event;
111     my $ma = $e->search_actor_user(
112         {mailing_address => $addrid, deleted => 'f'}, {idlist => 1});
113     my $ba = $e->search_actor_user(
114         {billing_address => $addrid, deleted => 'f'}, {idlist => 1});
115
116         my @list = (@$ma, @$ba, $ad->usr);
117         my %dedup = map { $_ => 1 } @list;
118         return [ keys %dedup ];
119 }
120
121
122
123 __PACKAGE__->register_method(
124         method  => 'reset_group',
125         api_name        => 'open-ils.actor.usergroup.new',
126         signature       => q/
127                 Gives the requested user a new empty usergroup.  
128                 @param auth The auth token
129                 @param userid The id of the user who needs the new usergroup
130                 @param leader If true, this user will be marked as the group leader
131         /
132 );
133
134 sub reset_group {
135         my( $self, $conn, $auth, $userid, $leader ) = @_;
136
137         my $e = new_editor(authtoken=>$auth, xact=>1);
138         return $e->die_event unless $e->checkauth;
139         return $e->die_event unless $e->allowed('UPDATE_USER'); # XXX reley on editor perm
140
141         my $user = $e->retrieve_actor_user($userid) or return $e->die_event;
142
143         # ask for a new group id
144         my $groupid = $U->storagereq('open-ils.storage.actor.user.group_id.new');
145
146         $user->usrgroup($groupid);
147         $user->master_account('t') if $leader;
148
149         $e->update_actor_user($user) or return $e->die_event;
150         $e->commit;
151         return $groupid;
152 }
153
154
155
156
157 1;