diff options
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 5a20dc54f..b22e3f5a3 100644 --- a/FS/FS/ClientAPI/MyAccount.pm +++ b/FS/FS/ClientAPI/MyAccount.pm @@ -982,10 +982,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 e38294276..e6344e4aa 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 322fea902..d35e93e83 100644 --- a/FS/FS/svc_acct.pm +++ b/FS/FS/svc_acct.pm @@ -2380,5 +2380,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;  | 
