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";
10 sub initialize { return 1; }
14 __PACKAGE__->register_method(
15 method => 'group_money_summary',
16 api_name => 'open-ils.actor.usergroup.members.balance_owed',
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');
28 my $users = $e->search_actor_user(
29 {usrgroup => $group_id, deleted => 'f'}, {idlist => 1});
32 for my $uid ( @$users ) {
33 push @mous, @{$e->json_query(
35 select => {mous => ['usr', 'balance_owed']},
37 where => { usr => $uid }
46 __PACKAGE__->register_method(
47 method => 'get_users_from_usergroup',
48 api_name => 'open-ils.actor.usergroup.members.retrieve',
51 Returns a list of ids for users that are in the given usergroup
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});
66 __PACKAGE__->register_method(
67 method => 'get_leaders_from_usergroup',
68 api_name => 'open-ils.actor.usergroup.leaders.retrieve',
70 Returns a list of ids for users that are leaders of the given usergroup
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'})
85 push( @res, $u->id ) if $u->master_account;
93 __PACKAGE__->register_method(
94 method => 'get_address_members',
95 api_name => 'open-ils.actor.address.members',
97 Returns a list of ids for users that link to the given address
99 @param addrid The address id
103 sub get_address_members {
104 my( $self, $conn, $auth, $addrid ) = @_;
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
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});
116 my @list = (@$ma, @$ba, $ad->usr);
117 my %dedup = map { $_ => 1 } @list;
118 return [ keys %dedup ];
123 __PACKAGE__->register_method(
124 method => 'reset_group',
125 api_name => 'open-ils.actor.usergroup.new',
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
135 my( $self, $conn, $auth, $userid, $leader ) = @_;
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
141 my $user = $e->retrieve_actor_user($userid) or return $e->die_event;
143 # ask for a new group id
144 my $groupid = $U->storagereq('open-ils.storage.actor.user.group_id.new');
146 $user->usrgroup($groupid);
147 $user->master_account('t') if $leader;
149 $e->update_actor_user($user) or return $e->die_event;