diff options
-rw-r--r-- | FS/FS/ClientAPI/MyAccount.pm | 17 | ||||
-rw-r--r-- | FS/FS/ClientAPI_XMLRPC.pm | 1 | ||||
-rw-r--r-- | FS/FS/Conf.pm | 26 | ||||
-rw-r--r-- | fs_selfservice/FS-SelfService/SelfService.pm | 1 | ||||
-rw-r--r-- | fs_selfservice/FS-SelfService/cgi/process_suspend_pkg.html | 3 | ||||
-rw-r--r-- | fs_selfservice/FS-SelfService/cgi/provision_list.html | 30 | ||||
-rw-r--r-- | fs_selfservice/FS-SelfService/cgi/selfservice.cgi | 22 |
7 files changed, 87 insertions, 13 deletions
diff --git a/FS/FS/ClientAPI/MyAccount.pm b/FS/FS/ClientAPI/MyAccount.pm index 1e1d1d3b1..377eb22d5 100644 --- a/FS/FS/ClientAPI/MyAccount.pm +++ b/FS/FS/ClientAPI/MyAccount.pm @@ -266,6 +266,9 @@ sub access_info { @{ $info->{cust_paybys} } ]; + $info->{'self_suspend_reason'} = + $conf->config('selfservice-self_suspend_reason'); + return { %$info, 'custnum' => $custnum, 'access_pkgnum' => $session->{'pkgnum'}, @@ -1453,8 +1456,18 @@ sub order_renew { } -sub cancel_pkg { +# these are basically the same +sub cancel_pkg { alter_pkg(shift, 'cancel', 'quiet' => 1) } +sub suspend_pkg { + my $conf = new FS::Conf; + my $reasonnum = $conf->config('selfservice-self_suspend_reason') + or return { 'error' => "Permission denied" }; + alter_pkg(shift, 'suspend', 'reason' => $reasonnum) +} + +sub alter_pkg { my $p = shift; + my $method = shift; my $session = _cache->get($p->{'session_id'}) or return { 'error' => "Can't resume session" }; #better error message @@ -1469,7 +1482,7 @@ sub cancel_pkg { 'pkgnum' => $pkgnum, } ) or return { 'error' => "unknown pkgnum $pkgnum" }; - my $error = $cust_pkg->cancel( 'quiet'=>1 ); + my $error = $cust_pkg->$method(@_); return { 'error' => $error }; } diff --git a/FS/FS/ClientAPI_XMLRPC.pm b/FS/FS/ClientAPI_XMLRPC.pm index 32e96b8e2..48b94eba2 100644 --- a/FS/FS/ClientAPI_XMLRPC.pm +++ b/FS/FS/ClientAPI_XMLRPC.pm @@ -91,6 +91,7 @@ sub ss2clientapi { 'renew_info' => 'MyAccount/renew_info', 'order_renew' => 'MyAccount/order_renew', 'cancel_pkg' => 'MyAccount/cancel_pkg', #add to ss cgi! + 'suspend_pkg' => 'MyAccount/suspend_pkg', #add to ss cgi! 'charge' => 'MyAccount/charge', #? 'part_svc_info' => 'MyAccount/part_svc_info', 'provision_acct' => 'MyAccount/provision_acct', diff --git a/FS/FS/Conf.pm b/FS/FS/Conf.pm index 1d946a5e8..08bdedd6f 100644 --- a/FS/FS/Conf.pm +++ b/FS/FS/Conf.pm @@ -2294,6 +2294,32 @@ and customer address. Include units.', }, { + 'key' => 'selfservice-self_suspend_reason', + 'section' => 'self-service', + 'description' => 'Suspend reason when customers suspend their own packages. Set to nothing to disallow self-suspension.', + 'type' => 'select-sub', + 'options_sub' => sub { require FS::Record; + require FS::reason; + my $type = qsearchs('reason_type', + { class => 'S' }) + or return (); + map { $_->reasonnum => $_->reason } + FS::Record::qsearch('reason', + { reason_type => $type->typenum } + ); + }, + 'option_sub' => sub { require FS::Record; + require FS::reason; + my $reason = FS::Record::qsearchs( + 'reason', { 'reasonnum' => shift } + ); + $reason ? $reason->reason : ''; + }, + + 'per_agent' => 1, + }, + + { 'key' => 'card_refund-days', 'section' => 'billing', 'description' => 'After a payment, the number of days a refund link will be available for that payment. Defaults to 120.', diff --git a/fs_selfservice/FS-SelfService/SelfService.pm b/fs_selfservice/FS-SelfService/SelfService.pm index fc9a37a95..990ff2074 100644 --- a/fs_selfservice/FS-SelfService/SelfService.pm +++ b/fs_selfservice/FS-SelfService/SelfService.pm @@ -53,6 +53,7 @@ $socket .= '.'.$tag if defined $tag && length($tag); 'renew_info' => 'MyAccount/renew_info', 'order_renew' => 'MyAccount/order_renew', 'cancel_pkg' => 'MyAccount/cancel_pkg', #add to ss cgi! + 'suspend_pkg' => 'MyAccount/suspend_pkg', #add to ss cgi! 'charge' => 'MyAccount/charge', #? 'part_svc_info' => 'MyAccount/part_svc_info', 'provision_acct' => 'MyAccount/provision_acct', diff --git a/fs_selfservice/FS-SelfService/cgi/process_suspend_pkg.html b/fs_selfservice/FS-SelfService/cgi/process_suspend_pkg.html new file mode 100644 index 000000000..d5c62f4f1 --- /dev/null +++ b/fs_selfservice/FS-SelfService/cgi/process_suspend_pkg.html @@ -0,0 +1,3 @@ +<%= $url = "$selfurl?session=$session_id;action="; ''; %> +<%= include('header', 'Package suspended') %> +<%= include('footer') %> diff --git a/fs_selfservice/FS-SelfService/cgi/provision_list.html b/fs_selfservice/FS-SelfService/cgi/provision_list.html index 88d1c848b..818cd9f35 100644 --- a/fs_selfservice/FS-SelfService/cgi/provision_list.html +++ b/fs_selfservice/FS-SelfService/cgi/provision_list.html @@ -9,18 +9,30 @@ function areyousure(href, message) { <TABLE BORDER=0 CELLSPACING=0 CELLPADDING=2 BGCOLOR="#ffffff"> -<%= foreach my $pkg ( - grep { scalar(@{$_->{part_svc}}) - || scalar(@{$_->{cust_svc}}) - } @cust_pkg +<%= + +foreach my $pkg ( + grep { scalar(@{$_->{part_svc}}) + || scalar(@{$_->{cust_svc}}) + } @cust_pkg ) { + my $susp = $pkg->{'susp'} || ''; + warn $pkg->{'pkg'}. ' '.$susp."\n"; + my @pkg_actions = ( [ 'customer_change_pkg' => 'change' ] ); + push @pkg_actions, [ 'process_suspend_pkg' => 'suspend' ] + if $self_suspend_reason and !$susp; + my $bgcolor = $susp ? '"#ff9900"' : '"#8888ff"'; $OUT .= #'<TABLE BORDER=0 CELLSPACING=0 CELLPADDING=2 BGCOLOR="#ffffff">'. - '<TR><TH BGCOLOR="#6666ff" COLSPAN=2>'. - $pkg->{'pkg'}. '</TH><TH BGCOLOR="#6666ff" >' . - qq!(<A style="font-size: smaller;color: #000000" HREF="! . - qq!${url}customer_change_pkg;pkgnum=$pkg->{'pkgnum'};pkg=$pkg->{'pkg'}">! . - 'change</A>)</TH></TR>'; + '<TR><TH BGCOLOR='.$bgcolor.' COLSPAN=2>'. + $pkg->{'pkg'}. ($susp && ' (suspended)'). + '</TH><TH ALIGN="left" BGCOLOR='.$bgcolor.'>'; + foreach my $action (@pkg_actions) { + $OUT .= '(<A style="font-size: smaller;color: #000000" HREF="' . + $url . $action->[0] . ';pkgnum=' . $pkg->{'pkgnum'} . ';pkg=' . + $pkg->{'pkg'} . '">' . $action->[1] . '</A>) '; + } + $OUT .= '</TH></TR>'; my $col1 = "ffffff"; my $col2 = "dddddd"; diff --git a/fs_selfservice/FS-SelfService/cgi/selfservice.cgi b/fs_selfservice/FS-SelfService/cgi/selfservice.cgi index 711bd4e12..d23e6ba68 100644 --- a/fs_selfservice/FS-SelfService/cgi/selfservice.cgi +++ b/fs_selfservice/FS-SelfService/cgi/selfservice.cgi @@ -14,7 +14,7 @@ use FS::SelfService qw( payment_info process_payment realtime_collect process_prepay list_pkgs order_pkg signup_info order_recharge part_svc_info provision_acct provision_external - unprovision_svc change_pkg domainselector + unprovision_svc change_pkg suspend_pkg domainselector list_svcs list_svc_usage list_cdr_usage list_support_usage myaccount_passwd mason_comp @@ -73,7 +73,7 @@ $session_id = $cgi->param('session'); #order|pw_list XXX ??? $cgi->param('action') =~ - /^(myaccount|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)$/ + /^(myaccount|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)$/ or die "unknown action ". $cgi->param('action'); my $action = $1; @@ -329,6 +329,24 @@ sub process_change_pkg { } +sub process_suspend_pkg { + my $results = ''; + $results = suspend_pkg ( + 'session_id' => $session_id, + map { $_ => $cgi->param($_) } + qw( pkgnum ) + ); + if ( $results->{'error'} ) { + $action = 'provision'; + return { + 'error' => '<FONT COLOR="#FF0000">'. $results->{'error'}. '</FONT>', + } + } + else { + return $results; + } +} + sub process_order_recharge { my $results = ''; |