]> git.evergreen-ils.org Git - working/Evergreen.git/blob - Open-ILS/src/perlmods/OpenILS/Application/Actor/UserGroups.pm
added a balance owed summary call for group members
[working/Evergreen.git] / Open-ILS / src / perlmods / 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     return $e->json_query(
28         {
29             select => {mous => ['usr', 'balance_owed']},
30             from => 'mous',
31             where => {
32                 usr => {
33                     in => {
34                         select => {au => ['id']}, 
35                         from => 'au', 
36                         where => {usrgroup => $group_id}
37                     }
38                 }
39             }
40         }
41     );
42 }
43
44
45 __PACKAGE__->register_method(
46         method => 'get_users_from_usergroup',
47         api_name        => 'open-ils.actor.usergroup.members.retrieve',
48     authoritative => 1,
49         signature       => q/
50                 Returns a list of ids for users that are in the given usergroup
51         /
52 );
53
54 sub get_users_from_usergroup {
55         my( $self, $conn, $auth, $usergroup ) = @_;
56         my $e = new_editor(authtoken=>$auth);
57         return $e->event unless $e->checkauth;
58         return $e->event unless $e->allowed('VIEW_USER'); # XXX reley on editor perm
59         return $e->search_actor_user({usrgroup => $usergroup}, {idlist => 1});
60 }
61
62
63
64 __PACKAGE__->register_method(
65         method => 'get_leaders_from_usergroup',
66         api_name        => 'open-ils.actor.usergroup.leaders.retrieve',
67         signature       => q/
68                 Returns a list of ids for users that are leaders of the given usergroup
69         /
70 );
71
72 sub get_leaders_from_usergroup {
73         my( $self, $conn, $auth, $usergroup ) = @_;
74         my $e = new_editor(authtoken=>$auth);
75         return $e->event unless $e->checkauth;
76         return $e->event unless $e->allowed('VIEW_USER'); # XXX reley on editor perm
77         my $users = $e->search_actor_user({usrgroup => $usergroup})
78                 or return $e->event;
79
80         my @res;
81         for my $u (@$users) {
82                 push( @res, $u->id ) if $u->master_account;
83         }
84
85         return \@res;
86 }
87
88
89
90 __PACKAGE__->register_method(
91         method => 'get_address_members',
92         api_name        => 'open-ils.actor.address.members',
93         signature       => q/
94                 Returns a list of ids for users that link to the given address
95                 @param auth
96                 @param addrid The address id
97         /
98 );
99
100 sub get_address_members {
101         my( $self, $conn, $auth, $addrid ) = @_;
102
103         my $e = new_editor(authtoken=>$auth);
104         return $e->event unless $e->checkauth;
105         return $e->event unless $e->allowed('VIEW_USER'); # XXX reley on editor perm
106
107         my $ad = $e->retrieve_actor_user_address($addrid) or return $e->event;
108         my $ma = $e->search_actor_user({mailing_address => $addrid}, {idlist => 1});
109         my $ba = $e->search_actor_user({billing_address => $addrid}, {idlist => 1});
110
111         my @list = (@$ma, @$ba, $ad->usr);
112         my %dedup = map { $_ => 1 } @list;
113         return [ keys %dedup ];
114 }
115
116
117
118 __PACKAGE__->register_method(
119         method  => 'reset_group',
120         api_name        => 'open-ils.actor.usergroup.new',
121         signature       => q/
122                 Gives the requested user a new empty usergroup.  
123                 @param auth The auth token
124                 @param userid The id of the user who needs the new usergroup
125                 @param leader If true, this user will be marked as the group leader
126         /
127 );
128
129 sub reset_group {
130         my( $self, $conn, $auth, $userid, $leader ) = @_;
131
132         my $e = new_editor(authtoken=>$auth, xact=>1);
133         return $e->die_event unless $e->checkauth;
134         return $e->die_event unless $e->allowed('UPDATE_USER'); # XXX reley on editor perm
135
136         my $user = $e->retrieve_actor_user($userid) or return $e->die_event;
137
138         # ask for a new group id
139         my $groupid = $U->storagereq('open-ils.storage.actor.user.group_id.new');
140
141         $user->usrgroup($groupid);
142         $user->master_account('t') if $leader;
143
144         $e->update_actor_user($user) or return $e->die_event;
145         $e->commit;
146         return $groupid;
147 }
148
149
150
151
152 1;