diff options
-rw-r--r-- | FS/FS/cust_main/Packages.pm | 24 | ||||
-rw-r--r-- | httemplate/view/cust_main/billing.html | 20 |
2 files changed, 40 insertions, 4 deletions
diff --git a/FS/FS/cust_main/Packages.pm b/FS/FS/cust_main/Packages.pm index e9134021b..9e21dd2b0 100644 --- a/FS/FS/cust_main/Packages.pm +++ b/FS/FS/cust_main/Packages.pm @@ -701,6 +701,13 @@ sub num_cancelled_pkgs { $self->num_pkgs($opt); } +=item num_ncancelled_pkgs + +Returns the number of packages that have not been cancelled (see L<FS::cust_pkg>) for this +customer. + +=cut + sub num_ncancelled_pkgs { my $self = shift; my $opt = shift || {}; @@ -709,6 +716,23 @@ sub num_ncancelled_pkgs { $self->num_pkgs($opt); } +=item num_billing_pkgs + +Returns the number of packages that have not been cancelled +and have a non-zero billing frequency (see L<FS::cust_pkg>) +for this customer. + +=cut + +sub num_billing_pkgs { + my $self = shift; + my $opt = shift || {}; + $opt->{addl_from} .= ' LEFT JOIN part_pkg USING (pkgpart)'; + $opt->{extra_sql} .= ' AND ' if $opt->{extra_sql}; + $opt->{extra_sql} .= "freq IS NOT NULL AND freq != '0'"; + $self->num_ncancelled_pkgs($opt); +} + sub num_suspended_pkgs { my $self = shift; my $opt = shift || {}; diff --git a/httemplate/view/cust_main/billing.html b/httemplate/view/cust_main/billing.html index a94b5c15a..7ee05a357 100644 --- a/httemplate/view/cust_main/billing.html +++ b/httemplate/view/cust_main/billing.html @@ -31,8 +31,7 @@ 'subs' => [ 'get_display_recurring'] &> <SCRIPT> -<&| /elements/onload.js &> -get_display_recurring('custnum',<% $cust_main->custnum %>, function (xmlresult) { +function set_display_recurring (xmlresult) { var recurring = JSON.parse(xmlresult); var rlabel = document.getElementById('recurring_label'); var rvalue = document.getElementById('recurring_value'); @@ -63,10 +62,23 @@ get_display_recurring('custnum',<% $cust_main->custnum %>, function (xmlresult) } else { rrow.parentNode.removeChild(rrow); } -}); -</&> +} </SCRIPT> +% # 10 is an arbitrary number, use ajax for customers with many packages +% if ( $cust_main->num_billing_pkgs > 10 ) { +<& '/elements/xmlhttp.html', + 'url' => $fsurl.'misc/xmlhttp-cust_main-display_recurring.html', + 'subs' => [ 'get_display_recurring'] &> +<SCRIPT> +get_display_recurring('custnum',<% $cust_main->custnum %>,set_display_recurring); +</SCRIPT> +% } else { +<SCRIPT> +set_display_recurring(<% encode_json({'display_recurring' => [ $cust_main->display_recurring ]}) |js_string %>); +</SCRIPT> +% } + % if ( $conf->exists('cust_main-select-prorate_day') ) { <TR> <TH ALIGN="right"><% mt('Prorate day of month') |h %></TH> |