[freeside-commits] branch FREESIDE_4_BRANCH updated. 6654e2207a768e27bc85a74e02ae66d53c0248b3

Mark Wells mark at 420.am
Thu Oct 6 16:48:34 PDT 2016


The branch, FREESIDE_4_BRANCH has been updated
       via  6654e2207a768e27bc85a74e02ae66d53c0248b3 (commit)
       via  f2374a673c944e1caa381f4fd2d9c2eb833f41b8 (commit)
       via  ca06d3471ad5ae4e22150c6f63fe94a8c834b887 (commit)
       via  29f8492a70b3472f1625243070bf58dca2e966b2 (commit)
       via  44430912d28687b2e7c5c201651a3b329d0626bf (commit)
       via  95986a16b7a93e58ab6cd5c284ac6df569107f19 (commit)
       via  0e3e0640d1ca5dfb2b0571e4b820b71a5606a1df (commit)
       via  893eb33723f9e113e9fd0a15d23ba0f295c2585c (commit)
      from  191ed671d297c587f8e3eea638a8d0a54494b845 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit 6654e2207a768e27bc85a74e02ae66d53c0248b3
Author: Mark Wells <mark at freeside.biz>
Date:   Thu Oct 6 15:55:10 2016 -0700

    fix prospect creation from EUS API, #39776

diff --git a/FS/FS/ClientAPI/Signup.pm b/FS/FS/ClientAPI/Signup.pm
index df276f0..e11a47a 100644
--- a/FS/FS/ClientAPI/Signup.pm
+++ b/FS/FS/ClientAPI/Signup.pm
@@ -1295,7 +1295,15 @@ sub new_prospect {
         'title'     => $title,
     });
     if (!$part_referral) {
-      return { error => "Unknown referral type: '$title'" };
+      $part_referral = FS::part_referral->new({
+        'agentnum' => $agentnum,
+        'title'    => $title,
+        'referral' => $title,
+      });
+      $error = $part_referral->insert;
+      if ( $error ) {
+        warn "ERROR: could not create referral type '$title': $error\n";
+      }
     }
     $refnum = $part_referral->refnum;
   } elsif ( $packet->{refnum} ) {
@@ -1344,9 +1352,8 @@ sub new_prospect {
   }
   $location->set('country', $country);
   $location->set('state', $state);
-  $prospect->set('cust_location', $location);
 
-  $error ||= $prospect->insert; # also does location
+  $error ||= $prospect->insert( cust_location => $location );
   return { error => $error } if $error;
 
   my $contact = FS::contact->new({
diff --git a/ng_selfservice/coverage_post.php b/ng_selfservice/coverage_post.php
index 657a2ff..c457002 100644
--- a/ng_selfservice/coverage_post.php
+++ b/ng_selfservice/coverage_post.php
@@ -10,7 +10,7 @@ $xml = file_get_contents('php://input');
 $doc = new SimpleXMLElement($xml);
 $cd = $doc->CustomerDetails;
 if ($DEBUG) {
-    error_log(var_dump($cd));
+    error_log(print_r($cd),1);
 }
 
 // State and Country are names rather than codes, but we fix that on the other
@@ -35,9 +35,9 @@ $prospect = Array();
 foreach ($map_fields as $k => $v) {
     $prospect[$k] = (string)($cd->$v);
 }
-error_log(var_dump($prospect));
+error_log(print_r($prospect),1);
 $freeside = new FreesideSelfService();
 $result = $freeside->new_prospect($prospect);
-error_log(var_dump($result));
+error_log(print_r($result),1);
 
 ?>

commit f2374a673c944e1caa381f4fd2d9c2eb833f41b8
Author: Mark Wells <mark at freeside.biz>
Date:   Thu Oct 6 14:38:08 2016 -0700

    on 4.x, always show included minutes on invoice, #71455

diff --git a/FS/FS/part_pkg/voip_cdr.pm b/FS/FS/part_pkg/voip_cdr.pm
index 4b5158e..420026d 100644
--- a/FS/FS/part_pkg/voip_cdr.pm
+++ b/FS/FS/part_pkg/voip_cdr.pm
@@ -120,10 +120,6 @@ tie my %accountcode_tollfree_field, 'Tie::IxHash',
     'min_included' => { 'name' => 'Minutes included when using the "single price per minute" or "prefix" rating method',
                     },
 
-    'show_min_included' => { 'name' => 'Show included minutes as an invoice detail',
-                             'type' => 'checkbox',
-                    },
-
     'min_charge' => { 'name' => 'Charge per minute when using "single price per minute" rating method',
                     },
 
@@ -329,7 +325,7 @@ tie my %accountcode_tollfree_field, 'Tie::IxHash',
                        cdr_svc_method
                        rating_method rounding ratenum intrastate_ratenum 
                        calls_included
-                       min_charge min_included show_min_included
+                       min_charge min_included
                        sec_granularity
                        ignore_unrateable
                        default_prefix
@@ -547,8 +543,7 @@ sub calc_usage {
   $formatter->finish; #writes into $details
   unshift @$details, $formatter->header if @$details;
 
-  if ( $self->option_cacheable('show_min_included', 1)
-       and $included_min_total > 0 ) {
+  if ( $included_min_total > 0 ) {
 
     my $min_detail = sprintf('%d / %d ',
                        $included_min_total - $included_min_left,

commit ca06d3471ad5ae4e22150c6f63fe94a8c834b887
Author: Mark Wells <mark at freeside.biz>
Date:   Thu Oct 6 12:59:16 2016 -0700

    fix config label display after popup changes

diff --git a/httemplate/config/config-view.cgi b/httemplate/config/config-view.cgi
index 248af37..e63dfe3 100644
--- a/httemplate/config/config-view.cgi
+++ b/httemplate/config/config-view.cgi
@@ -133,12 +133,13 @@ invoice language options:
 
     <tr>
 %     unless ( $cgi->param('showagent') ) {
-        <td><% include('/elements/popup_link.html',
+        <td>
+          <% include('/elements/popup_link.html',
                          'action'      => $action,
                          'width'       => $width,
                          'height'      => $height,
                          'actionlabel' => 'Enter configuration value',
-                         'label'       => "<b>$label</b>",
+                         'html_label'  => "<b>$label</b>",
                          'aname'       => $i->key,
                     )
           %>: 

commit 29f8492a70b3472f1625243070bf58dca2e966b2
Author: Mark Wells <mark at freeside.biz>
Date:   Thu Oct 6 12:35:58 2016 -0700

    fix tower height, #39776

diff --git a/httemplate/misc/tower-export.html b/httemplate/misc/tower-export.html
index d359a97..9d63640 100644
--- a/httemplate/misc/tower-export.html
+++ b/httemplate/misc/tower-export.html
@@ -18,7 +18,7 @@ if ( $cgi->param('format') eq 'tc' ) {
     next if ( !$tower->latitude or !$tower->longitude );
 
     my $name = $tower->towername;
-    my $height = ( ($tower->altitude || 0 ) + ($tower->height || 0) ) / 3.28;
+    my $height = ($tower->height || 0) / 3.28;
     $name =~ s(,)( )g;
     $text .= join(',',
       $name,

commit 44430912d28687b2e7c5c201651a3b329d0626bf
Author: Mark Wells <mark at freeside.biz>
Date:   Thu Oct 6 12:35:57 2016 -0700

    create prospects from towercoverage.com EUS, #39776

diff --git a/ng_selfservice/coverage_post.php b/ng_selfservice/coverage_post.php
new file mode 100644
index 0000000..657a2ff
--- /dev/null
+++ b/ng_selfservice/coverage_post.php
@@ -0,0 +1,43 @@
+<?
+
+$DEBUG = 1;
+
+require_once('freeside.class.php');
+
+$xml = file_get_contents('php://input');
+//error_log($xml);
+
+$doc = new SimpleXMLElement($xml);
+$cd = $doc->CustomerDetails;
+if ($DEBUG) {
+    error_log(var_dump($cd));
+}
+
+// State and Country are names rather than codes, but we fix that on the other
+// end.
+// It doesn't look like TowerCoverage ever sends a company name.
+$map_fields = Array(
+    'first'           => 'FirstName',
+    'last'            => 'LastName',
+    'address1'        => 'StreetAddress',
+    'city'            => 'City',
+    'state'           => 'State',
+    'country'         => 'Country',
+    'zip'             => 'ZIP',
+    'phone_daytime'   => 'PhoneNumber',
+    'emailaddress'    => 'EmailAddress',
+    'comment'         => 'Comment',
+    'referral_title'  => 'HearAbout',
+);
+
+$prospect = Array();
+// missing from this: any way to set the agent. this should use the API key.
+foreach ($map_fields as $k => $v) {
+    $prospect[$k] = (string)($cd->$v);
+}
+error_log(var_dump($prospect));
+$freeside = new FreesideSelfService();
+$result = $freeside->new_prospect($prospect);
+error_log(var_dump($result));
+
+?>

commit 95986a16b7a93e58ab6cd5c284ac6df569107f19
Author: Mark Wells <mark at freeside.biz>
Date:   Thu Oct 6 12:35:56 2016 -0700

    make new_prospect smarter, #39776

diff --git a/FS/FS/ClientAPI/Signup.pm b/FS/FS/ClientAPI/Signup.pm
index ef95071..df276f0 100644
--- a/FS/FS/ClientAPI/Signup.pm
+++ b/FS/FS/ClientAPI/Signup.pm
@@ -1247,9 +1247,11 @@ sub get_agentnum {
 
 Creates a new L<FS::prospect_main> entry. PACKET must contain:
 
-- either agentnum or session_id (unless signup_server-default_agentnum exists)
+- either agentnum or session_id; if not, signup_server-default_agentnum will
+be used and must not be empty
 
-- refnum (unless signup_server-default_refnum exists)
+- either refnum or referral_title; if not, signup_server-default_refnum will
+be used and must not be empty
 
 - last and first (names), and optionally company and title
 
@@ -1257,8 +1259,15 @@ Creates a new L<FS::prospect_main> entry. PACKET must contain:
 
 - emailaddress
 
+and can also contain:
+
 - one or more of phone_daytime, phone_night, phone_mobile, and phone_fax
 
+- a 'comment' (will be attached to the contact)
+
+State and country will be normalized to Freeside state/country codes if
+necessary.
+
 =cut
 
 sub new_prospect {
@@ -1271,10 +1280,29 @@ sub new_prospect {
   my $dbh = dbh;
   my $conf = FS::Conf->new;
 
+  my $error;
+
   my $agentnum = get_agentnum($packet);
   return $agentnum if ref $agentnum;
-  my $refnum = $packet->{refnum}
-               || $conf->config('signup_server-default_refnum');
+  my $refnum;
+  if ( my $title = $packet->{referral_title} ) {
+    my $part_referral = qsearchs('part_referral', {
+        'agentnum'  => $agentnum,
+        'title'     => $title,
+    });
+    $part_referral ||= qsearchs('part_referral', {
+        'agentnum'  => '',
+        'title'     => $title,
+    });
+    if (!$part_referral) {
+      return { error => "Unknown referral type: '$title'" };
+    }
+    $refnum = $part_referral->refnum;
+  } elsif ( $packet->{refnum} ) {
+    $refnum = $packet->{refnum};
+  }
+  $refnum ||= $conf->config('signup_server-default_refnum');
+  return { error => "Signup referral type is not configured" } if !$refnum;
 
   my $prospect = FS::prospect_main->new({
       'agentnum' => $agentnum,
@@ -1283,12 +1311,42 @@ sub new_prospect {
   });
 
   my $location = FS::cust_location->new;
-  foreach ( qw(address1 address2 city county state zip country ) ) {
+  foreach ( qw(address1 address2 city county zip ) ) {
     $location->set($_, $packet->{$_});
   }
+  # normalize country and state if they're not already ISO codes
+  # easier than doing it on the client side--we already have the tables here
+  my $country = $packet->{country};
+  my $state = $packet->{state};
+  if (length($country) > 2) {
+    # it likes title case
+    $country = join(' ', map ucfirst, split(/\s+/, $country));
+    my $lsc = Locale::SubCountry->new($country);
+    if ($lsc) {
+      $country = uc($lsc->country_code);
+
+      if ($lsc->has_sub_countries) {
+        if ( $lsc->full_name($state) eq 'unknown' ) {
+          # then we were probably given a full name, so resolve it
+          $state = $lsc->code($state);
+          if ( $state eq 'unknown' ) {
+            # doesn't resolve as a full name either, return an error
+            $error = "Unknown state: ".$packet->{state};
+          } else {
+            $state = uc($state);
+          }
+        }
+      } # else state doesn't matter
+    } else {
+      # couldn't find the country in LSC
+      $error = "Unknown country: $country";
+    }
+  }
+  $location->set('country', $country);
+  $location->set('state', $state);
   $prospect->set('cust_location', $location);
-  
-  my $error = $prospect->insert; # also does location
+
+  $error ||= $prospect->insert; # also does location
   return { error => $error } if $error;
 
   my $contact = FS::contact->new({
@@ -1297,7 +1355,7 @@ sub new_prospect {
       invoice_dest  => 'Y',
   });
   # use emailaddress pseudo-field behavior here
-  foreach (qw(last first title emailaddress)) {
+  foreach (qw(last first title emailaddress comment)) {
     $contact->set($_, $packet->{$_});
   }
   $error = $contact->insert;

commit 0e3e0640d1ca5dfb2b0571e4b820b71a5606a1df
Author: Mark Wells <mark at freeside.biz>
Date:   Wed Apr 13 13:18:41 2016 -0700

    add part_referral external ID for API signups, #39776

diff --git a/FS/FS/Schema.pm b/FS/FS/Schema.pm
index a98d984..0c31340 100644
--- a/FS/FS/Schema.pm
+++ b/FS/FS/Schema.pm
@@ -3614,10 +3614,11 @@ sub tables_hashref {
         'refnum',   'serial',     '',        '', '', '', 
         'referral', 'varchar',    '',   $char_d, '', '', 
         'disabled', 'char',   'NULL',         1, '', '', 
-        'agentnum', 'int',    'NULL',        '', '', '', 
+        'agentnum', 'int',    'NULL',        '', '', '',
+        'title',   'varchar', 'NULL',   $char_d, '', '', 
       ],
       'primary_key'  => 'refnum',
-      'unique'       => [],
+      'unique'       => [ ['agentnum', 'title'] ],
       'index'        => [ ['disabled'], ['agentnum'], ],
       'foreign_keys' => [
                           { columns    => [ 'agentnum' ],
diff --git a/FS/FS/part_referral.pm b/FS/FS/part_referral.pm
index e4a5823..2df8a75 100644
--- a/FS/FS/part_referral.pm
+++ b/FS/FS/part_referral.pm
@@ -44,6 +44,9 @@ The following fields are currently supported:
 
 =item agentnum - Optional agentnum (see L<FS::agent>)
 
+=item title - an optional external string that identifies this
+referral source, such as an advertising campaign code.
+
 =back
 
 =head1 NOTE
@@ -101,6 +104,7 @@ sub check {
     || $self->ut_text('referral')
     || $self->ut_enum('disabled', [ '', 'Y' ] )
     #|| $self->ut_foreign_keyn('agentnum', 'agent', 'agentnum')
+    || $self->ut_textn('title')
     || ( $setup_hack
            ? $self->ut_foreign_keyn('agentnum', 'agent', 'agentnum' )
            : $self->ut_agentnum_acl('agentnum', 'Edit global advertising sources')
diff --git a/httemplate/edit/part_referral.html b/httemplate/edit/part_referral.html
index e9fd794..04287d6 100755
--- a/httemplate/edit/part_referral.html
+++ b/httemplate/edit/part_referral.html
@@ -3,11 +3,13 @@
                 'table'       => 'part_referral',
                 'fields'      => [ 'referral',
                                    { field=>'agentnum', type=>'select-agent', },
+                                   'title',
                                    { field=>'disabled', type=>'checkbox', value=>'Y'  } ,
                                  ],
                 'labels'      => { 'refnum'   => 'Ad Source',
                                    'referral' => 'Advertising source',
                                    'agentnum' => 'Agent',
+                                   'title'    => 'External ID',
                                    'disabled' => 'Disabled',
                                  },
                 'viewall_dir' => 'browse',

commit 893eb33723f9e113e9fd0a15d23ba0f295c2585c
Author: Mark Wells <mark at freeside.biz>
Date:   Thu Oct 6 12:35:28 2016 -0700

    create prospects through signup API, #39776

diff --git a/FS/FS/ClientAPI/Signup.pm b/FS/FS/ClientAPI/Signup.pm
index b5ae860..ef95071 100644
--- a/FS/FS/ClientAPI/Signup.pm
+++ b/FS/FS/ClientAPI/Signup.pm
@@ -7,7 +7,7 @@ use Data::Dumper;
 use Tie::RefHash;
 use Digest::SHA qw(sha512_hex);
 use FS::Conf;
-use FS::Record qw(qsearch qsearchs dbdef);
+use FS::Record qw(qsearch qsearchs dbdef dbh);
 use FS::CGI qw(popurl);
 use FS::Msgcat qw(gettext);
 use FS::Misc qw(card_types);
@@ -31,6 +31,25 @@ use FS::cust_payby;
 $DEBUG = 1;
 $me = '[FS::ClientAPI::Signup]';
 
+=head1 NAME
+
+FS::ClientAPI::Signup - Front-end API for signing up customers
+
+=head1 DESCRIPTION
+
+This module provides the ClientAPI functions for talking to a signup
+server. The signup server is open to the public, i.e. does not require a
+login. The back-end Freeside server creates customers, orders packages and
+services, and processes initial payments.
+
+=head1 METHODS
+
+=over 4
+
+=cut
+
+# document the rest of this as we work on it
+
 sub clear_cache {
   warn "$me clear_cache called\n" if $DEBUG;
   my $cache = new FS::ClientAPI_SessionCache( {
@@ -496,21 +515,8 @@ sub new_customer {
     #possibly some validation will be needed
   }
 
-  my $agentnum;
-  if ( exists $packet->{'session_id'} ) {
-    my $cache = new FS::ClientAPI_SessionCache( {
-      'namespace' => 'FS::ClientAPI::Agent',
-    } );
-    my $session = $cache->get($packet->{'session_id'});
-    if ( $session ) {
-      $agentnum = $session->{'agentnum'};
-    } else {
-      return { 'error' => "Can't resume session" }; #better error message
-    }
-  } else {
-    $agentnum = $packet->{agentnum}
-                || $conf->config('signup_server-default_agentnum');
-  }
+  my $agentnum = get_agentnum($packet);
+  return $agentnum if ref($agentnum);
 
   my ($bill_hash, $ship_hash);
   foreach my $f (FS::cust_main->location_fields) {
@@ -921,21 +927,8 @@ sub new_customer_minimal {
     #possibly some validation will be needed
   }
 
-  my $agentnum;
-  if ( exists $packet->{'session_id'} ) {
-    my $cache = new FS::ClientAPI_SessionCache( {
-      'namespace' => 'FS::ClientAPI::Agent',
-    } );
-    my $session = $cache->get($packet->{'session_id'});
-    if ( $session ) {
-      $agentnum = $session->{'agentnum'};
-    } else {
-      return { 'error' => "Can't resume session" }; #better error message
-    }
-  } else {
-    $agentnum = $packet->{agentnum}
-                || $conf->config('signup_server-default_agentnum');
-  }
+  my $agentnum = get_agentnum($packet);
+  return $agentnum if ref($agentnum);
 
   #shares some stuff with htdocs/edit/process/cust_main.cgi... take any
   # common that are still here and library them.
@@ -1217,4 +1210,128 @@ sub capture_payment {
 
 }
 
+=item get_agentnum PACKET
+
+Given a PACKET from the signup server, looks up the agentnum to use for signing
+up a customer. This will use 'session_id' if the agent is authenticated,
+otherwise 'agentnum', otherwise the 'signup_server-default_agentnum' config. If
+the agent can't be found, returns an error packet.
+
+=cut
+
+sub get_agentnum {
+  my $packet = shift;
+  my $conf = new FS::Conf;
+  my $agentnum;
+  if ( exists $packet->{'session_id'} ) {
+    my $cache = new FS::ClientAPI_SessionCache( {
+      'namespace' => 'FS::ClientAPI::Agent',
+    } );
+    my $session = $cache->get($packet->{'session_id'});
+    if ( $session ) {
+      $agentnum = $session->{'agentnum'};
+    } else {
+      return { 'error' => "Can't resume session" }; #better error message
+    }
+  } else {
+    $agentnum = $packet->{agentnum}
+                || $conf->config('signup_server-default_agentnum');
+  }
+  if ( $agentnum and FS::agent->count('agentnum = ?', $agentnum) ) {
+    return $agentnum;
+  }
+  return { 'error' => 'Signup is not configured' };
+}
+
+=item new_prospect PACKET
+
+Creates a new L<FS::prospect_main> entry. PACKET must contain:
+
+- either agentnum or session_id (unless signup_server-default_agentnum exists)
+
+- refnum (unless signup_server-default_refnum exists)
+
+- last and first (names), and optionally company and title
+
+- address1, city, state, country, zip, and optionally address2
+
+- emailaddress
+
+- one or more of phone_daytime, phone_night, phone_mobile, and phone_fax
+
+=cut
+
+sub new_prospect {
+
+  my $packet = shift;
+  warn "$me new_prospect called\n".Dumper($packet) if $DEBUG;
+
+  my $oldAutoCommit = $FS::UID::AutoCommit;
+  local $FS::UID::AutoCommit = 0;
+  my $dbh = dbh;
+  my $conf = FS::Conf->new;
+
+  my $agentnum = get_agentnum($packet);
+  return $agentnum if ref $agentnum;
+  my $refnum = $packet->{refnum}
+               || $conf->config('signup_server-default_refnum');
+
+  my $prospect = FS::prospect_main->new({
+      'agentnum' => $agentnum,
+      'refnum'   => $refnum,
+      'company'  => $packet->{company},
+  });
+
+  my $location = FS::cust_location->new;
+  foreach ( qw(address1 address2 city county state zip country ) ) {
+    $location->set($_, $packet->{$_});
+  }
+  $prospect->set('cust_location', $location);
+  
+  my $error = $prospect->insert; # also does location
+  return { error => $error } if $error;
+
+  my $contact = FS::contact->new({
+      prospectnum   => $prospect->prospectnum,
+      locationnum   => $location->locationnum,
+      invoice_dest  => 'Y',
+  });
+  # use emailaddress pseudo-field behavior here
+  foreach (qw(last first title emailaddress)) {
+    $contact->set($_, $packet->{$_});
+  }
+  $error = $contact->insert;
+  if ( $error ) {
+    $dbh->rollback if $oldAutoCommit;
+    return { error => $error };
+  }
+
+  foreach my $phone_type (qsearch('phone_type', {})) {
+    my $key = 'phone_' . lc($phone_type->typename);
+    my $phonenum = $packet->{$key};
+    if ( $phonenum ) {
+      # just to not have to supply country code from the other end
+      my $number = Number::Phone->new($location->country, $phonenum);
+      if (!$number) {
+        $error = 'invalid phone number';
+      } else {
+        my $phone = FS::contact_phone->new({
+            contactnum    => $contact->contactnum,
+            phonenum      => $phonenum,
+            countrycode   => $number->country_code,
+            phonetypenum  => $phone_type->phonetypenum,
+        });
+        $error = $phone->insert;
+      }
+      if ( $error ) {
+        $dbh->rollback if $oldAutoCommit;
+        return { error => $phone_type->typename . ' phone: ' . $error };
+      }
+    }
+  } # foreach $phone_type
+  
+  $dbh->commit if $oldAutoCommit;
+  return { prospectnum => $prospect->prospectnum };
+}
+
 1;
diff --git a/FS/FS/ClientAPI_XMLRPC.pm b/FS/FS/ClientAPI_XMLRPC.pm
index 4dc2f8e..3167aa0 100644
--- a/FS/FS/ClientAPI_XMLRPC.pm
+++ b/FS/FS/ClientAPI_XMLRPC.pm
@@ -194,6 +194,7 @@ sub ss2clientapi {
   'new_customer_minimal'      => 'Signup/new_customer_minimal',
   'capture_payment'           => 'Signup/capture_payment',
   'clear_signup_cache'        => 'Signup/clear_cache',
+  'new_prospect'              => 'Signup/new_prospect',
   'new_agent'                 => 'Agent/new_agent',
   'agent_login'               => 'Agent/agent_login',
   'agent_logout'              => 'Agent/agent_logout',
diff --git a/fs_selfservice/FS-SelfService/SelfService.pm b/fs_selfservice/FS-SelfService/SelfService.pm
index 43a605d..185e3e2 100644
--- a/fs_selfservice/FS-SelfService/SelfService.pm
+++ b/fs_selfservice/FS-SelfService/SelfService.pm
@@ -114,6 +114,7 @@ $socket .= '.'.$tag if defined $tag && length($tag);
   'new_customer'              => 'Signup/new_customer',
   'new_customer_minimal'      => 'Signup/new_customer_minimal',
   'capture_payment'           => 'Signup/capture_payment',
+  'new_prospect'              => 'Signup/new_prospect',
   #N/A 'clear_signup_cache'        => 'Signup/clear_cache',
   'new_agent'                 => 'Agent/new_agent',
   'agent_login'               => 'Agent/agent_login',

-----------------------------------------------------------------------

Summary of changes:
 FS/FS/ClientAPI/Signup.pm                    |  244 ++++++++++++++++++++++----
 FS/FS/ClientAPI_XMLRPC.pm                    |    1 +
 FS/FS/Schema.pm                              |    5 +-
 FS/FS/part_pkg/voip_cdr.pm                   |    9 +-
 FS/FS/part_referral.pm                       |    4 +
 fs_selfservice/FS-SelfService/SelfService.pm |    1 +
 httemplate/config/config-view.cgi            |    5 +-
 httemplate/edit/part_referral.html           |    2 +
 httemplate/misc/tower-export.html            |    2 +-
 ng_selfservice/coverage_post.php             |   43 +++++
 10 files changed, 273 insertions(+), 43 deletions(-)
 create mode 100644 ng_selfservice/coverage_post.php




More information about the freeside-commits mailing list