summaryrefslogtreecommitdiff
path: root/FS
diff options
context:
space:
mode:
authorjeff <jeff>2007-12-12 05:58:43 +0000
committerjeff <jeff>2007-12-12 05:58:43 +0000
commitffa1f64207647ee1c5126bfad6a246526f4c677c (patch)
tree90d58093853240ef489bac509b785d29a8600359 /FS
parent158a88620fa861dc473bf5501526fb1e9a9517dd (diff)
self-service can select domain on provision (#2801)
Diffstat (limited to 'FS')
-rw-r--r--FS/FS/ClientAPI/MyAccount.pm11
-rw-r--r--FS/FS/ClientAPI/Signup.pm26
-rw-r--r--FS/FS/Setup.pm4
-rw-r--r--FS/FS/svc_acct.pm56
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;