1 package OpenILS::Application::Actor::Stage;
2 use strict; use warnings;
3 use base 'OpenILS::Application';
4 use OpenILS::Application::AppUtils;
5 use OpenILS::Utils::CStoreEditor q/:funcs/;
6 use OpenSRF::Utils::Logger q/$logger/;
7 use OpenILS::Utils::Fieldmapper;
8 my $U = "OpenILS::Application::AppUtils";
11 __PACKAGE__->register_method (
12 method => 'create_user_stage',
13 api_name => 'open-ils.actor.user.stage.create',
16 sub create_user_stage {
17 my($self, $conn, $user, $mail_addr, $bill_addr) = @_; # more?
19 return 0 unless $U->ou_ancestor_setting_value('opac.allow_pending_user');
20 return OpenILS::Event->new('BAD_PARAMS') unless $user;
22 my $e = new_editor(xact => 1);
24 my $uname = $U->create_uuid_string;
25 $user->usrname($uname);
27 $e->create_staging_user_stage($user) or return $e->die_event;
30 $mail_addr->usrname($uname);
31 $e->create_staging_mailing_address_stage($mail_addr) or return $e->die_event;
35 $bill_addr->usrname($uname);
36 $e->create_staging_billing_address_stage($bill_addr) or return $e->die_event;
40 $conn->respond_complete($uname);
42 $U->create_trigger_event('stgu.create', $user, $user->home_ou);
46 __PACKAGE__->register_method (
47 method => 'user_stage_by_org',
48 api_name => 'open-ils.actor.user.stage.retrieve.by_org',
52 sub user_stage_by_org {
53 my($self, $conn, $auth, $org_id, $limit, $offset) = @_;
55 my $e = new_editor(authtoken => $auth);
56 return $e->event unless $e->checkauth;
57 $org_id ||= $e->requestor->ws_ou;
58 return $e->event unless $e->allowed('VIEW_USER', $org_id);
63 my $stage_ids = $e->search_staging_user_stage(
65 { home_ou => $org_id, complete => 'f'},
68 order_by => {stgu => 'row_id'}
74 $conn->respond(flesh_user_stage($e, $_)) for @$stage_ids;
78 sub flesh_user_stage {
80 my $user = $e->retrieve_staging_user_stage($row_id) or return undef;
83 billing_addresses => $e->search_staging_billing_address_stage({usrname => $user->usrname}),
84 mailing_addresses => $e->search_staging_mailing_address_stage({usrname => $user->usrname}),
85 cards => $e->search_staging_card_stage({usrname => $user->usrname}),
86 statcats => $e->search_staging_statcat_stage({usrname => $user->usrname})
91 __PACKAGE__->register_method (
92 method => 'user_stage_by_uname',
93 api_name => 'open-ils.actor.user.stage.retrieve.by_username',
96 sub user_stage_by_uname {
97 my($self, $conn, $auth, $username) = @_;
99 my $e = new_editor(authtoken => $auth);
100 return $e->event unless $e->checkauth;
102 my $user = $e->search_staging_user_stage({
103 usrname => $username,
105 })->[0] or return $e->event;
107 return $e->event unless $e->allowed('VIEW_USER', $user->home_ou);
108 return flesh_user_stage($e, $user->row_id);
114 __PACKAGE__->register_method (
115 method => 'delete_user_stage',
116 api_name => 'open-ils.actor.user.stage.delete',
119 sub delete_user_stage {
120 my($self, $conn, $auth, $row_id) = @_;
122 my $e = new_editor(authtoken => $auth, xact => 1);
123 return $e->die_event unless $e->checkauth;
124 my $data = flesh_user_stage($e, $row_id) or return $e->die_event;
126 return $e->die_event unless $e->allowed('UPDATE_USER', $data->{user}->home_ou);
128 $e->delete_staging_user_stage($data->{user}) or return $e->die_event;
130 for my $addr (@{$data->{mailing_addresses}}) {
131 $e->delete_staging_mailing_address_stage($addr) or return $e->die_event;
134 for my $addr (@{$data->{billing_addresses}}) {
135 $e->delete_staging_billing_address_stage($addr) or return $e->die_event;
138 for my $card (@{$data->{cards}}) {
139 $e->delete_staging_card_stage($card) or return $e->die_event;
142 for my $statcat (@{$data->{statcats}}) {
143 $e->delete_staging_statcat_stage($statcat) or return $e->die_event;