diff options
author | jeff <jeff> | 2007-12-12 05:58:43 +0000 |
---|---|---|
committer | jeff <jeff> | 2007-12-12 05:58:43 +0000 |
commit | ffa1f64207647ee1c5126bfad6a246526f4c677c (patch) | |
tree | 90d58093853240ef489bac509b785d29a8600359 /FS | |
parent | 158a88620fa861dc473bf5501526fb1e9a9517dd (diff) |
self-service can select domain on provision (#2801)
Diffstat (limited to 'FS')
-rw-r--r-- | FS/FS/ClientAPI/MyAccount.pm | 11 | ||||
-rw-r--r-- | FS/FS/ClientAPI/Signup.pm | 26 | ||||
-rw-r--r-- | FS/FS/Setup.pm | 4 | ||||
-rw-r--r-- | FS/FS/svc_acct.pm | 56 |
4 files changed, 95 insertions, 2 deletions
diff --git a/FS/FS/ClientAPI/MyAccount.pm b/FS/FS/ClientAPI/MyAccount.pm index 6e4545aee..61078a94e 100644 --- a/FS/FS/ClientAPI/MyAccount.pm +++ b/FS/FS/ClientAPI/MyAccount.pm @@ -1033,10 +1033,17 @@ sub provision_acct { if $p->{'_password'} ne $p->{'_password2'}; return { 'error' => gettext('empty_password') } unless length($p->{'_password'}); + + if ($p->{'domsvc'}) { + my %domains = domain_select_hash FS::svc_acct(map { $_ => $p->{$_} } + qw ( svcpart pkgnum ) ); + return { 'error' => gettext('invalid_domain') } + unless ($domains{$p->{'domsvc'}}); + } _provision( 'FS::svc_acct', - [qw(username _password)], - [qw(username _password)], + [qw(username _password domsvc)], + [qw(username _password domsvc)], $p, @_ ); diff --git a/FS/FS/ClientAPI/Signup.pm b/FS/FS/ClientAPI/Signup.pm index d33dd799c..61325b9e1 100644 --- a/FS/FS/ClientAPI/Signup.pm +++ b/FS/FS/ClientAPI/Signup.pm @@ -287,6 +287,32 @@ sub signup_info { } +sub domain_select_hash { + my $packet = shift; + + my $response = {}; + + if ($packet->{pkgpart}) { + my $part_pkg = qsearchs('part_pkg' => { 'pkgpart' => $packet->{pkgpart} } ); + #$packet->{svcpart} = $part_pkg->svcpart('svc_acct') + $packet->{svcpart} = $part_pkg->svcpart + if $part_pkg; + } + + if ($packet->{svcpart}) { + my $part_svc = qsearchs('part_svc' => { 'svcpart' => $packet->{svcpart} } ); + $response->{'domsvc'} = $part_svc->part_svc_column('domsvc')->columnvalue + if ($part_svc && $part_svc->part_svc_column('domsvc')->columnflag eq 'D'); + } + + $response->{'domains'} + = { domain_select_hash FS::svc_acct( map { $_ => $packet->{$_} } + qw(svcpart pkgnum) + ) }; + + $response; +} + sub new_customer { my $packet = shift; diff --git a/FS/FS/Setup.pm b/FS/FS/Setup.pm index d8099c6a9..d265d937f 100644 --- a/FS/FS/Setup.pm +++ b/FS/FS/Setup.pm @@ -504,6 +504,10 @@ sub msgcat_messages { 'en_US' => 'Driver\'s License State', }, + 'invalid_domain' => { + 'en_US' => 'Invalid domain', + }, + ); } diff --git a/FS/FS/svc_acct.pm b/FS/FS/svc_acct.pm index 1cddbeeec..259d093c6 100644 --- a/FS/FS/svc_acct.pm +++ b/FS/FS/svc_acct.pm @@ -2549,5 +2549,61 @@ schema.html from the base documentation. =cut +=item domain_select_hash %OPTIONS + +Returns a hash SVCNUM => DOMAIN ... representing the domains this customer +may at present purchase. + +Currently available options are: I<pkgnum> I<svcpart> + +=cut + +sub domain_select_hash { + my ($self, %options) = @_; + my %domains = (); + my $part_svc; + my $cust_pkg; + + if (ref($self)) { + $part_svc = $self->part_svc; + $cust_pkg = $self->cust_svc->cust_pkg + if $self->cust_svc; + } + + $part_svc = qsearchs('part_svc', { 'svcpart' => $options{svcpart} }) + if $options{'svcpart'}; + + $cust_pkg = qsearchs('cust_pkg', { 'pkgnum' => $options{pkgnum} }) + if $options{'pkgnum'}; + + if ($part_svc && ( $part_svc->part_svc_column('domsvc')->columnflag eq 'S' + || $part_svc->part_svc_column('domsvc')->columnflag eq 'F')) { + %domains = map { $_->svcnum => $_->domain } + map { qsearchs('svc_domain', { 'svcnum' => $_ }) } + split(',', $part_svc->part_svc_column('domsvc')->columnvalue); + }elsif ($cust_pkg && !$conf->exists('svc_acct-alldomains') ) { + %domains = map { $_->svcnum => $_->domain } + map { qsearchs('svc_domain', { 'svcnum' => $_->svcnum }) } + map { qsearch('cust_svc', { 'pkgnum' => $_->pkgnum } ) } + qsearch('cust_pkg', { 'custnum' => $cust_pkg->custnum }); + }else{ + %domains = map { $_->svcnum => $_->domain } qsearch('svc_domain', {} ); + } + + if ($part_svc && $part_svc->part_svc_column('domsvc')->columnflag eq 'D') { + my $svc_domain = qsearchs('svc_domain', + { 'svcnum' => $part_svc->part_svc_column('domsvc')->columnvalue } ); + if ( $svc_domain ) { + $domains{$svc_domain->svcnum} = $svc_domain->domain; + }else{ + warn "unknown svc_domain.svcnum for part_svc_column domsvc: ". + $part_svc->part_svc_column('domsvc')->columnvalue; + + } + } + + (%domains); +} + 1; |