From: C.J. Adams-Collier Date: Thu, 25 Sep 2014 20:15:18 +0000 (-0700) Subject: FS RT #30362 - added configuration option to disable package modification in selfservice X-Git-Url: http://git.freeside.biz/gitweb/?p=freeside.git;a=commitdiff_plain;h=7bcf726ffbb331ad01e717f7de36bfb42f5ca4ba FS RT #30362 - added configuration option to disable package modification in selfservice checking for this value before displaying change link or accepting form submission data --- diff --git a/FS/FS/ClientAPI/MyAccount.pm b/FS/FS/ClientAPI/MyAccount.pm index 9330049eb..0131d8969 100644 --- a/FS/FS/ClientAPI/MyAccount.pm +++ b/FS/FS/ClientAPI/MyAccount.pm @@ -1617,6 +1617,7 @@ sub list_pkgs { or return { 'error' => "unknown custnum $custnum" }; my $conf = new FS::Conf; + my $immutable = $conf->exists('selfservice_immutable-package'); # the duplication below is necessary: # 1. to maintain the current buggy behaviour wrt the cust_pkg and part_pkg @@ -1629,6 +1630,7 @@ sub list_pkgs { 'custnum' => $custnum, 'cust_pkg' => [ map { { $_->hash, + immutable => $immutable, part_pkg => [ map $_->hashref, $_->part_pkg ], part_svc => [ map $_->hashref, $_->available_part_svc ], @@ -1661,6 +1663,7 @@ sub list_pkgs { my $primary_cust_svc = $_->primary_cust_svc; +{ $_->hash, $_->part_pkg->hash, + immutable => $immutable, pkg_label => $_->pkg_locale, status => $_->status, statuscolor => $_->statuscolor, @@ -2353,6 +2356,10 @@ sub change_pkg { my($context, $session, $custnum) = _custoragent_session_custnum($p); return { 'error' => $session } if $context eq 'error'; + my $conf = new FS::Conf; + my $immutable = $conf->exists('selfservice_immutable-package'); + return { 'error' => "Package modification disabled" } if $immutable; + my $search = { 'custnum' => $custnum }; $search->{'agentnum'} = $session->{'agentnum'} if $context eq 'agent'; my $cust_main = qsearchs('cust_main', $search ) @@ -2374,7 +2381,6 @@ sub change_pkg { \@newpkg, ); - my $conf = new FS::Conf; if ( $conf->exists('signup_server-realtime') ) { my $bill_error = _do_bop_realtime( $cust_main, $status, 'no_credit'=>1 ); diff --git a/FS/FS/Conf.pm b/FS/FS/Conf.pm index a6781e941..1ed6b0cb6 100644 --- a/FS/FS/Conf.pm +++ b/FS/FS/Conf.pm @@ -2753,6 +2753,15 @@ and customer address. Include units.', }, { + 'key' => 'selfservice_immutable-package', + 'section' => 'self-service', + 'description' => 'Disable package changes in self-service interface.', + 'type' => 'checkbox', + 'per_agent' => 1, + }, + + + { 'key' => 'selfservice_process-pkgpart', 'section' => 'billing', 'description' => 'Package to add to each manual credit card and ACH payment entered by the customer themselves in the self-service interface. Enabling this option may be in violation of your merchant agreement(s), so please check it(/them) carefully before enabling this option.', diff --git a/fs_selfservice/FS-SelfService/cgi/provision_list.html b/fs_selfservice/FS-SelfService/cgi/provision_list.html index 24d6ff436..b558337de 100644 --- a/fs_selfservice/FS-SelfService/cgi/provision_list.html +++ b/fs_selfservice/FS-SelfService/cgi/provision_list.html @@ -13,8 +13,8 @@ foreach my $pkg ( my $susp = $pkg->{'susp'} || ''; my @pkg_actions = (); if ( ! $susp ) { - push @pkg_actions, [ 'customer_change_pkg' => 'change' ]; - push @pkg_actions, [ 'process_suspend_pkg' => 'suspend' ] + push @pkg_actions, [ 'customer_change_pkg' => 'change' ] unless $pkg->{'immutable'}; + push @pkg_actions, [ 'process_suspend_pkg' => 'suspend' ] if $self_suspend_reason; }