summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormark <mark>2010-11-23 01:40:12 +0000
committermark <mark>2010-11-23 01:40:12 +0000
commitee03c169b91b87c93c21f768d103eb7316559214 (patch)
tree5c5896bab3d3b1fe7772af76c2170d8a78b952c3
parent6b706c66d9f4247d4ba70c59adb726f3d932643c (diff)
selfservice command to suspend packages, RT#9989
-rw-r--r--FS/FS/ClientAPI/MyAccount.pm17
-rw-r--r--FS/FS/ClientAPI_XMLRPC.pm1
-rw-r--r--FS/FS/Conf.pm26
-rw-r--r--fs_selfservice/FS-SelfService/SelfService.pm1
-rw-r--r--fs_selfservice/FS-SelfService/cgi/process_suspend_pkg.html3
-rw-r--r--fs_selfservice/FS-SelfService/cgi/provision_list.html30
-rw-r--r--fs_selfservice/FS-SelfService/cgi/selfservice.cgi22
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 = '';