self-service improvements: DIDs, RT10885
authorlevinse <levinse>
Tue, 21 Dec 2010 06:26:12 +0000 (06:26 +0000)
committerlevinse <levinse>
Tue, 21 Dec 2010 06:26:12 +0000 (06:26 +0000)
FS/FS/ClientAPI/MyAccount.pm
FS/FS/cust_pkg.pm
fs_selfservice/FS-SelfService/SelfService.pm
fs_selfservice/FS-SelfService/cgi/myaccount_menu.html
fs_selfservice/FS-SelfService/cgi/provision_svc_phone.html [new file with mode: 0644]
fs_selfservice/FS-SelfService/cgi/selfservice.cgi
fs_selfservice/FS-SelfService/cgi/ws_list.html
httemplate/elements/select-did.html
httemplate/elements/select-phonenum.html

index f6a71cd..e41fe7d 100644 (file)
@@ -1548,6 +1548,20 @@ sub cancel_pkg {
 
 }
 
+sub provision_phone {
+ my $p = shift;
+ my @bulkdid = @{$p->{'bulkdid'}};
+ unless (scalar(@bulkdid)) {
+    return _provision( 'FS::svc_phone',
+                 [qw(phonenum countrycode)],
+                 [qw(phonenum countrycode)],
+                 $p,
+                 @_
+               );
+ }
+#XXX: finish bulk orders
+}
+
 sub provision_acct {
   my $p = shift;
   warn "provision_acct called\n"
index b97bc93..5bb07d4 100644 (file)
@@ -1746,6 +1746,13 @@ sub available_part_svc {
           my $part_svc = $_->part_svc;
           $part_svc->{'Hash'}{'num_avail'} = #evil encapsulation-breaking
             $_->quantity - $self->num_cust_svc($_->svcpart);
+
+         # more evil encapsulation breakage
+         if($part_svc->{'Hash'}{'num_avail'} > 0) {
+           my @exports = $part_svc->part_export_did;
+           $part_svc->{'Hash'}{'can_get_dids'} = scalar(@exports);
+         }
+
           $part_svc;
         }
       $self->part_pkg->pkg_svc;
index b992ac9..fe2feb3 100644 (file)
@@ -57,6 +57,7 @@ $socket .= '.'.$tag if defined $tag && length($tag);
   'charge'                    => 'MyAccount/charge',        #?
   'part_svc_info'             => 'MyAccount/part_svc_info',
   'provision_acct'            => 'MyAccount/provision_acct',
+  'provision_phone'           => 'MyAccount/provision_phone',
   'provision_external'        => 'MyAccount/provision_external',
   'unprovision_svc'           => 'MyAccount/unprovision_svc',
   'myaccount_passwd'          => 'MyAccount/myaccount_passwd',
index 1f448a1..4036432 100644 (file)
@@ -28,7 +28,7 @@ if ( 1 ) { #XXXFIXME "enable selfservice prepay features" flag or something, eve
   #XXXFIXME still a bit sloppy for multi-gateway of differing namespace
   my $i = 0;
   while($i < scalar(@cust_paybys)) { last if $cust_paybys[$i] =~ /^CARD/; $i++ }
-  if ( $cust_paybys[$i] =~ /^CARD/ ) {
+  if ( $cust_paybys[$i] && $cust_paybys[$i] =~ /^CARD/ ) {
     push @menu, { title  => 'Recharge my account with a credit card',
                   url    => $hide_payment_fields[$i]
                               ? 'make_thirdparty_payment&payby_method=CC'
@@ -39,7 +39,7 @@ if ( 1 ) { #XXXFIXME "enable selfservice prepay features" flag or something, eve
 
   $i = 0;
   while($i < scalar(@cust_paybys)) { last if $cust_paybys[$i] =~ /^CHEK/; $i++ }
-  if ( $cust_paybys[$i] =~ /^CHEK/ ) {
+  if ( $cust_paybys[$i] && $cust_paybys[$i] =~ /^CHEK/ ) {
     push @menu, { title  => 'Recharge my account with a check',
                   url    => $hide_payment_fields[$i]
                               ? 'make_thirdparty_payment&payby_method=ECHECK'
diff --git a/fs_selfservice/FS-SelfService/cgi/provision_svc_phone.html b/fs_selfservice/FS-SelfService/cgi/provision_svc_phone.html
new file mode 100644 (file)
index 0000000..6baa1e6
--- /dev/null
@@ -0,0 +1,17 @@
+<%= $url = "$selfurl?session=$session_id;action="; ''; %>
+<%= include('header', 'Setup phone number') %>
+
+<FORM name="OneTrueForm" action="<%= $url %>" METHOD="POST">
+<INPUT TYPE="hidden" NAME="session" VALUE="<%= $session_id %>">
+<INPUT TYPE="hidden" NAME="action" VALUE="process_svc_phone">
+<INPUT TYPE="hidden" NAME="pkgnum" VALUE="<%= $pkgnum %>">
+<INPUT TYPE="hidden" NAME="svcpart" VALUE="<%= $svcpart %>">
+<%= didselector('field' => 'phonenum', 
+               'svcpart' => $svcpart,
+               'bulknum' => $numavail,
+               );
+%>
+<BR><BR><INPUT TYPE="submit" VALUE="Setup">
+</FORM>
+
+<%= include('footer') %>
index 72e49b4..1f8e550 100644 (file)
@@ -13,7 +13,7 @@ use FS::SelfService qw(
   access_info login_info login customer_info edit_info invoice
   payment_info process_payment realtime_collect process_prepay
   list_pkgs order_pkg signup_info order_recharge
-  part_svc_info provision_acct provision_external
+  part_svc_info provision_acct provision_external provision_phone
   unprovision_svc change_pkg suspend_pkg domainselector
   list_svcs list_svc_usage list_cdr_usage list_support_usage
   myaccount_passwd list_invoices create_ticket get_ticket did_report
@@ -73,7 +73,7 @@ $session_id = $cgi->param('session');
 
 #order|pw_list XXX ???
 $cgi->param('action') =~
-    /^(myaccount|tktcreate|tktview|didreport|invoices|view_invoice|make_payment|make_ach_payment|make_term_payment|make_thirdparty_payment|payment_results|ach_payment_results|recharge_prepay|recharge_results|logout|change_bill|change_ship|change_pay|process_change_bill|process_change_ship|process_change_pay|customer_order_pkg|process_order_pkg|customer_change_pkg|process_change_pkg|process_order_recharge|provision|provision_svc|process_svc_acct|process_svc_external|delete_svc|view_usage|view_usage_details|view_cdr_details|view_support_details|change_password|process_change_password|customer_suspend_pkg|process_suspend_pkg)$/
+    /^(myaccount|tktcreate|tktview|didreport|invoices|view_invoice|make_payment|make_ach_payment|make_term_payment|make_thirdparty_payment|payment_results|ach_payment_results|recharge_prepay|recharge_results|logout|change_bill|change_ship|change_pay|process_change_bill|process_change_ship|process_change_pay|customer_order_pkg|process_order_pkg|customer_change_pkg|process_change_pkg|process_order_recharge|provision|provision_svc|process_svc_acct|process_svc_phone|process_svc_external|delete_svc|view_usage|view_usage_details|view_cdr_details|view_support_details|change_password|process_change_password|customer_suspend_pkg|process_suspend_pkg)$/
   or die "unknown action ". $cgi->param('action');
 my $action = $1;
 
@@ -649,6 +649,34 @@ sub provision_svc {
     or die 'Unknown svcdb '. $result->{'svcdb'};
   $action .= "_$1";
 
+  $result->{'numavail'} = $cgi->param('numavail');
+
+  $result;
+}
+
+sub process_svc_phone {
+    my @bulkdid = $cgi->param('bulkdid');
+    my $phonenum = $cgi->param('phonenum');
+
+    my $result = provision_phone (
+       'session_id' => $session_id,
+       'bulkdid' => [ @bulkdid ],
+       'countrycode' => '1',
+        map { $_ => $cgi->param($_) } qw( pkgnum svcpart phonenum )
+    );
+    
+    if ( exists $result->{'error'} && $result->{'error'} ) { 
+       $action = 'provision_svc_phone';
+       return {
+         $cgi->Vars,
+         %{ part_svc_info( 'session_id' => $session_id,
+                        map { $_ => $cgi->param($_) } qw( pkgnum svcpart )
+             )
+         },
+         'error' => $result->{'error'},
+       };
+  }
+
   $result;
 }
 
@@ -818,9 +846,10 @@ sub do_template {
 
 package FS::SelfService::_selfservicecgi;
 
-#use FS::SelfService qw(regionselector expselect popselector);
 use HTML::Entities;
-use FS::SelfService qw(regionselector popselector domainselector location_form);
+use FS::SelfService qw(
+    regionselector popselector domainselector location_form didselector
+);
 
 #false laziness w/agent.cgi
 use vars qw(@INCLUDE_ARGS);
index f4beedf..6b23b7d 100644 (file)
@@ -19,19 +19,20 @@ sub ws_pkgstatus {
 sub pdate {
     my($field,$date_format) = (shift,shift);
     return "<TD>".Date::Format::time2str($date_format,$field)."</TD>" 
-       if $field > 0;
+       if $field && $field > 0;
     '<TD></TD>';
 }
 
 if ( $pkgpart ) {
-    $OUT .= qq! <TABLE BORDER="1"><TR><TH>Package</TH><TH>Status</TH> !;
+    $OUT .= qq! <TABLE BORDER="1" style="empty-cells: show"><TR><TH>Package</TH><TH>Status</TH> !;
     $OUT .= "<TH>Setup</TH><TH>Last Bill</TH><TH>Next Bill</TH><TH>Adjourn</TH>";
     $OUT .= "<TH>Suspend</TH><TH>Expire</TH><TH>Contract End</TH>";
-    $OUT .= "<TH>Cancel</TH></TR>";
+    $OUT .= "<TH>Cancel</TH><TH>Services</TH></TR>";
     foreach my $pkg ( @cust_pkg ) {
        my $part_pkg = $pkg->{part_pkg}[0];
        $status = ws_pkgstatus($pkg);
-       if($pkg->{pkgpart} == $pkgpart && ($filter eq $status || !$filter) ) {
+       if($pkg->{pkgpart} == $pkgpart && 
+               ( ($filter && $filter eq $status) || !$filter) ) {
            $OUT .= "<TR><TD>$part_pkg->{pkg}</TD><TD>$status</TD>"; 
            $OUT .= pdate($pkg->{setup},$date_format);
            $OUT .= pdate($pkg->{last_bill},$date_format);
@@ -41,7 +42,24 @@ if ( $pkgpart ) {
            $OUT .= pdate($pkg->{expire},$date_format);
            $OUT .= pdate($pkg->{contract_end},$date_format);
            $OUT .= pdate($pkg->{cancel},$date_format);
-           $OUT .= "</TR>";
+
+           $OUT .= "<TD style='font-size: 85%'>";
+           my @cust_svc = @{$pkg->{cust_svc}};
+           foreach my $cust_svc ( @cust_svc ) {
+               my @label = @{$cust_svc->{'label'}};
+               $OUT .= qq!$label[0]: $label[1] <BR><BR>!;
+           }
+           my @part_svc = @{$pkg->{part_svc}};
+           foreach my $part_svc ( @part_svc ) {
+               my $link = qq!<A HREF="${url}provision_svc;!
+                   . qq!pkgnum=$pkg->{'pkgnum'};svcpart=$part_svc->{'svcpart'}!
+                   . qq!;numavail=$part_svc->{'num_avail'}">Setup !
+                   . qq!$part_svc->{'svc'}</A> ($part_svc->{'num_avail'}!
+                   . qq! available)<BR><BR>!;
+               $OUT .= $link if $part_svc->{'can_get_dids'};
+           }
+
+           $OUT .= "</TD></TR>";
        }
     }
     $OUT .= "</TABLE>";
index b62d6a0..062c98a 100644 (file)
@@ -44,6 +44,7 @@ Example:
           <% include('/elements/select-phonenum.html',
                        'svcpart' => $svcpart,
                        'empty'   => 'Select phone number',
+                      'bulknum' => $bulknum,
                     )
           %>
         </TD>
@@ -57,6 +58,19 @@ Example:
       </TR>
 
     </TABLE>
+%      if ( $bulknum ) {
+           <div id="bulkdid" style="padding-top: 11px">
+%              my $i;
+%              for($i=0; $i < $bulknum; $i++) {
+                   <div id="bulkdid_<%$i%>" style="display: none">
+                       <input type="checkbox" id="checkbox_bulkdid_<%$i%>"
+                           name="bulkdid" value="">
+                       <label for="checkbox_bulkdid_<%$i%>" 
+                           id="label_bulkdid_<%$i%>"></label>
+                   </div>
+%              }
+           </div>
+%      }
 
 % } else {
 
@@ -86,6 +100,8 @@ if ( scalar(@exports) > 1 ) {
 
 my $use_selector = scalar(@exports) ? 1 : 0;
 
+my $bulknum = $opt{'bulknum'} || 0;
+
 #my $field = $opt{'field'} || 'phonenum';
 
 </%init>
index b98d140..1c13ae0 100644 (file)
       //run the callback
       if ( callback != null ) 
         callback();
+
+       var phonenum_sel = what.form.<% $opt{'prefix'} %>phonenum;
+       var bulkdid = document.getElementById('bulkdid');
+       if ( bulkdid != null ) {
+           var numCheckboxes = Math.min(phonenum_sel.options.length-1,<% $opt{'bulknum'} %>);
+           var i;
+           for(i = 0; i < numCheckboxes; i++){
+               document.getElementById('bulkdid_'+i).style.display = 'block';
+               var tn = phonenum_sel.options[i+1].value;
+               document.getElementById('checkbox_bulkdid_'+i).value = tn;
+               document.getElementById('label_bulkdid_'+i).innerHTML = tn;
+           }
+           for(i = numCheckboxes; i < <% $opt{'bulknum'} %>; i++){
+               document.getElementById('bulkdid_'+i).style.display = 'none';
+               document.getElementById('checkbox_bulkdid_'+i).value = '';
+               document.getElementById('label_bulkdid_'+i).innerHTML = '';
+           }
+       }
+
     }
 
     // go get the new phonenums