From 46e04077cc22ff9d31e8e9896cbf97e31f1b0e7d Mon Sep 17 00:00:00 2001 From: levinse Date: Tue, 21 Dec 2010 06:26:12 +0000 Subject: [PATCH] self-service improvements: DIDs, RT10885 --- FS/FS/ClientAPI/MyAccount.pm | 14 ++++++++ FS/FS/cust_pkg.pm | 7 ++++ fs_selfservice/FS-SelfService/SelfService.pm | 1 + .../FS-SelfService/cgi/myaccount_menu.html | 4 +-- .../FS-SelfService/cgi/provision_svc_phone.html | 17 ++++++++++ fs_selfservice/FS-SelfService/cgi/selfservice.cgi | 37 +++++++++++++++++++--- fs_selfservice/FS-SelfService/cgi/ws_list.html | 28 +++++++++++++--- httemplate/elements/select-did.html | 16 ++++++++++ httemplate/elements/select-phonenum.html | 19 +++++++++++ 9 files changed, 132 insertions(+), 11 deletions(-) create mode 100644 fs_selfservice/FS-SelfService/cgi/provision_svc_phone.html diff --git a/FS/FS/ClientAPI/MyAccount.pm b/FS/FS/ClientAPI/MyAccount.pm index f6a71cd9b..e41fe7d56 100644 --- a/FS/FS/ClientAPI/MyAccount.pm +++ b/FS/FS/ClientAPI/MyAccount.pm @@ -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" diff --git a/FS/FS/cust_pkg.pm b/FS/FS/cust_pkg.pm index b97bc93a1..5bb07d4ff 100644 --- a/FS/FS/cust_pkg.pm +++ b/FS/FS/cust_pkg.pm @@ -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; diff --git a/fs_selfservice/FS-SelfService/SelfService.pm b/fs_selfservice/FS-SelfService/SelfService.pm index b992ac941..fe2feb3c1 100644 --- a/fs_selfservice/FS-SelfService/SelfService.pm +++ b/fs_selfservice/FS-SelfService/SelfService.pm @@ -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', diff --git a/fs_selfservice/FS-SelfService/cgi/myaccount_menu.html b/fs_selfservice/FS-SelfService/cgi/myaccount_menu.html index 1f448a104..4036432aa 100644 --- a/fs_selfservice/FS-SelfService/cgi/myaccount_menu.html +++ b/fs_selfservice/FS-SelfService/cgi/myaccount_menu.html @@ -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 index 000000000..6baa1e6fe --- /dev/null +++ b/fs_selfservice/FS-SelfService/cgi/provision_svc_phone.html @@ -0,0 +1,17 @@ +<%= $url = "$selfurl?session=$session_id;action="; ''; %> +<%= include('header', 'Setup phone number') %> + +
+ + + + +<%= didselector('field' => 'phonenum', + 'svcpart' => $svcpart, + 'bulknum' => $numavail, + ); +%> +

+
+ +<%= include('footer') %> diff --git a/fs_selfservice/FS-SelfService/cgi/selfservice.cgi b/fs_selfservice/FS-SelfService/cgi/selfservice.cgi index 72e49b47c..1f8e55025 100644 --- a/fs_selfservice/FS-SelfService/cgi/selfservice.cgi +++ b/fs_selfservice/FS-SelfService/cgi/selfservice.cgi @@ -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); diff --git a/fs_selfservice/FS-SelfService/cgi/ws_list.html b/fs_selfservice/FS-SelfService/cgi/ws_list.html index f4beedf33..6b23b7dcb 100644 --- a/fs_selfservice/FS-SelfService/cgi/ws_list.html +++ b/fs_selfservice/FS-SelfService/cgi/ws_list.html @@ -19,19 +19,20 @@ sub ws_pkgstatus { sub pdate { my($field,$date_format) = (shift,shift); return "".Date::Format::time2str($date_format,$field)."" - if $field > 0; + if $field && $field > 0; ''; } if ( $pkgpart ) { - $OUT .= qq! !; + $OUT .= qq!
PackageStatus
!; $OUT .= ""; $OUT .= ""; - $OUT .= ""; + $OUT .= ""; 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 .= ""; $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 .= ""; + + $OUT .= ""; } } $OUT .= "
PackageStatusSetupLast BillNext BillAdjournSuspendExpireContract EndCancel
CancelServices
$part_pkg->{pkg}$status
"; + my @cust_svc = @{$pkg->{cust_svc}}; + foreach my $cust_svc ( @cust_svc ) { + my @label = @{$cust_svc->{'label'}}; + $OUT .= qq!$label[0]: $label[1]

!; + } + my @part_svc = @{$pkg->{part_svc}}; + foreach my $part_svc ( @part_svc ) { + my $link = qq!Setup ! + . qq!$part_svc->{'svc'} ($part_svc->{'num_avail'}! + . qq! available)

!; + $OUT .= $link if $part_svc->{'can_get_dids'}; + } + + $OUT .= "
"; diff --git a/httemplate/elements/select-did.html b/httemplate/elements/select-did.html index b62d6a089..062c98a80 100644 --- a/httemplate/elements/select-did.html +++ b/httemplate/elements/select-did.html @@ -44,6 +44,7 @@ Example: <% include('/elements/select-phonenum.html', 'svcpart' => $svcpart, 'empty' => 'Select phone number', + 'bulknum' => $bulknum, ) %> @@ -57,6 +58,19 @@ Example: +% if ( $bulknum ) { +
+% my $i; +% for($i=0; $i < $bulknum; $i++) { + +% } +
+% } % } 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'; diff --git a/httemplate/elements/select-phonenum.html b/httemplate/elements/select-phonenum.html index b98d140e4..1c13ae039 100644 --- a/httemplate/elements/select-phonenum.html +++ b/httemplate/elements/select-phonenum.html @@ -58,6 +58,25 @@ //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 -- 2.11.0