From 077bb34b3467c3320440c49b76064f664c0eee98 Mon Sep 17 00:00:00 2001 From: ivan Date: Tue, 12 Jul 2011 22:58:41 +0000 Subject: [PATCH] fix UI for package editing w/recur_show_zero, add setup_show_zero, RT#9777 --- FS/FS/Schema.pm | 3 +++ FS/FS/cust_bill.pm | 17 +++++++++++--- FS/FS/cust_bill_pkg.pm | 21 ++++++++++++++---- FS/FS/cust_main/Billing.pm | 16 +++++++++----- FS/FS/cust_pkg.pm | 11 ++++++++++ FS/FS/part_pkg.pm | 1 + httemplate/browse/part_pkg.cgi | 34 ++++++++++++++++------------ httemplate/edit/part_pkg.cgi | 50 ++++++++++++++++++++++++++++++++---------- 8 files changed, 115 insertions(+), 38 deletions(-) diff --git a/FS/FS/Schema.pm b/FS/FS/Schema.pm index 1885a650c..548c22e77 100644 --- a/FS/FS/Schema.pm +++ b/FS/FS/Schema.pm @@ -1455,6 +1455,8 @@ sub tables_hashref { 'quantity', 'int', 'NULL', '', '', '', 'agent_pkgid', 'int', 'NULL', '', '', '', 'waive_setup', 'char', 'NULL', 1, '', '', + 'recur_show_zero', 'char', 'NULL', 1, '', '', + 'setup_show_zero', 'char', 'NULL', 1, '', '', ], 'primary_key' => 'pkgnum', 'unique' => [], @@ -1638,6 +1640,7 @@ sub tables_hashref { 'fcc_ds0s', 'int', 'NULL', '', '', '', 'no_auto', 'char', 'NULL', 1, '', '', 'recur_show_zero', 'char', 'NULL', 1, '', '', + 'setup_show_zero', 'char', 'NULL', 1, '', '', ], 'primary_key' => 'pkgpart', 'unique' => [], diff --git a/FS/FS/cust_bill.pm b/FS/FS/cust_bill.pm index 082c92d03..ec8ed29dc 100644 --- a/FS/FS/cust_bill.pm +++ b/FS/FS/cust_bill.pm @@ -4612,13 +4612,21 @@ sub _items_cust_bill_pkg { my $cust_pkg = $cust_bill_pkg->cust_pkg; - if ( $cust_bill_pkg->setup != 0 && (!$type || $type eq 'S') ) { + if ( (!$type || $type eq 'S') + && ( $cust_bill_pkg->setup != 0 + || $cust_bill_pkg->setup_show_zero + ) + ) + { warn "$me _items_cust_bill_pkg adding setup\n" if $DEBUG > 1; my $description = $desc; - $description .= ' Setup' if $cust_bill_pkg->recur != 0; + $description .= ' Setup' + if $cust_bill_pkg->recur != 0 + || $discount_show_always + || $cust_bill_pkg->recur_show_zero; my @d = (); unless ( $cust_pkg->part_pkg->hide_svc_detail @@ -4647,6 +4655,7 @@ sub _items_cust_bill_pkg { push @{ $s->{ext_description} }, @d; } else { $s = { + _is_setup => 1, description => $description, #pkgpart => $part_pkg->pkgpart, pkgnum => $cust_bill_pkg->pkgnum, @@ -4822,7 +4831,9 @@ sub _items_cust_bill_pkg { push @b, { %$_ } if $_->{amount} != 0 || $discount_show_always - || $cust_bill_pkg->recur_show_zero; + || ( ! $_->{_is_setup} && $cust_bill_pkg->recur_show_zero ) + || ( $_->{_is_setup} && $cust_bill_pkg->setup_show_zero ) + ; $_ = undef; } } diff --git a/FS/FS/cust_bill_pkg.pm b/FS/FS/cust_bill_pkg.pm index 2c79209c5..d332e363f 100644 --- a/FS/FS/cust_bill_pkg.pm +++ b/FS/FS/cust_bill_pkg.pm @@ -899,12 +899,25 @@ sub cust_bill_pkg_discount { =cut sub recur_show_zero { - my $self = shift; + #my $self = shift; + # $self->recur == 0 + #&& $self->pkgnum + #&& $self->cust_pkg->part_pkg->recur_show_zero; + + shift->_X_show_zero('recur'); + +} + +sub setup_show_zero { + shift->_X_show_zero('setup'); +} + +sub _X_show_zero { + my( $self, $what ) = @_; - $self->recur == 0 - && $self->pkgnum - && $self->cust_pkg->part_pkg->recur_show_zero; + return 0 unless $self->$what() == 0 && $self->pkgnum; + $self->cust_pkg->_X_show_zero($what); } =back diff --git a/FS/FS/cust_main/Billing.pm b/FS/FS/cust_main/Billing.pm index 4b9c3d328..e94cd8493 100644 --- a/FS/FS/cust_main/Billing.pm +++ b/FS/FS/cust_main/Billing.pm @@ -616,15 +616,18 @@ sub _omit_zero_value_bundles { && scalar(@{$cust_bill_pkg->get('discounts')}) && $conf->exists('discount-show-always')); - warn " pkgnum ". $cust_bill_pkg->pkgnum. - " sum $sum, recur_show_zero ". $cust_bill_pkg->recur_show_zero. "\n" + warn " pkgnum ". $cust_bill_pkg->pkgnum. " sum $sum, ". + "setup_show_zero ". $cust_bill_pkg->setup_show_zero. + "recur_show_zero ". $cust_bill_pkg->recur_show_zero. "\n" if $DEBUG > 0; if (scalar(@cust_bill_pkg_bundle) && !$cust_bill_pkg->pkgpart_override) { push @cust_bill_pkg, @cust_bill_pkg_bundle if $sum > 0 || ($sum == 0 && ( $discount_show_always - || grep $_->recur_show_zero, @cust_bill_pkg_bundle ) + || grep {$_->recur_show_zero || $_->setup_show_zero} + @cust_bill_pkg_bundle + ) ); @cust_bill_pkg_bundle = (); $sum = 0; @@ -638,7 +641,9 @@ sub _omit_zero_value_bundles { push @cust_bill_pkg, @cust_bill_pkg_bundle if $sum > 0 || ($sum == 0 && ( $discount_show_always - || grep $_->recur_show_zero, @cust_bill_pkg_bundle ) + || grep {$_->recur_show_zero || $_->setup_show_zero} + @cust_bill_pkg_bundle + ) ); warn " _omit_zero_value_bundles: ". scalar(@in). @@ -1048,7 +1053,8 @@ sub _make_lines { || $recur != 0 || (!$part_pkg->hidden && $options{has_hidden}) #include some $0 lines || $discount_show_always - || ($recur == 0 && $part_pkg->recur_show_zero) + || ($setup == 0 && $cust_pkg->_X_show_zero('setup')) + || ($recur == 0 && $cust_pkg->_X_show_zero('recur')) ) { diff --git a/FS/FS/cust_pkg.pm b/FS/FS/cust_pkg.pm index 872a6446a..07b71dc11 100644 --- a/FS/FS/cust_pkg.pm +++ b/FS/FS/cust_pkg.pm @@ -600,6 +600,8 @@ sub check { || $self->ut_enum('no_auto', [ '', 'Y' ]) || $self->ut_enum('waive_setup', [ '', 'Y' ]) || $self->ut_numbern('agent_pkgid') + || $self->ut_enum('recur_show_zero', [ '', 'Y', 'N', ]) + || $self->ut_enum('setup_show_zero', [ '', 'Y', 'N', ]) ; return $error if $error; @@ -3281,6 +3283,15 @@ sub _location_sql_where { "; } +sub _X_show_zero { + my( $self, $what ) = @_; + + my $what_show_zero = $what. '_show_zero'; + length($self->$what_show_zero()) + ? ($self->$what_show_zero() eq 'Y') + : $self->part_pkg->$what_show_zero(); +} + =head1 SUBROUTINES =over 4 diff --git a/FS/FS/part_pkg.pm b/FS/FS/part_pkg.pm index 1981d63df..4a0d157ca 100644 --- a/FS/FS/part_pkg.pm +++ b/FS/FS/part_pkg.pm @@ -554,6 +554,7 @@ sub check { || $self->ut_enum('custom', [ '', 'Y' ] ) || $self->ut_enum('no_auto', [ '', 'Y' ]) || $self->ut_enum('recur_show_zero', [ '', 'Y' ]) + || $self->ut_enum('setup_show_zero', [ '', 'Y' ]) #|| $self->ut_moneyn('setup_cost') #|| $self->ut_moneyn('recur_cost') || $self->ut_floatn('setup_cost') diff --git a/httemplate/browse/part_pkg.cgi b/httemplate/browse/part_pkg.cgi index ae869dda6..766806044 100755 --- a/httemplate/browse/part_pkg.cgi +++ b/httemplate/browse/part_pkg.cgi @@ -220,33 +220,39 @@ push @fields, sub { sprintf('%.2f', $part_pkg->option('setup_fee') ), align=>'right' }, - { data => ( $is_recur ? ' setup' : ' one-time' ), + { data => ( ( $is_recur ? ' setup' : ' one-time' ). + ( $part_pkg->option('recur_fee') == 0 + && $part_pkg->setup_show_zero + ? ' (printed on invoices)' + : '' + ) + ), align=>'left', }, ], [ - { data=>( $is_recur - ? $money_char.sprintf('%.2f ', $part_pkg->option('recur_fee')) - : $part_pkg->freq_pretty - ), + { data=>( + $is_recur + ? $money_char. sprintf('%.2f ', $part_pkg->option('recur_fee')) + : $part_pkg->freq_pretty + ), align=> ( $is_recur ? 'right' : 'center' ), colspan=> ( $is_recur ? 1 : 2 ), }, ( $is_recur - ? { data => ( $is_recur ? $part_pkg->freq_pretty : '' ), + ? { data => ( $is_recur + ? $part_pkg->freq_pretty. + ( $part_pkg->option('recur_fee') == 0 + && $part_pkg->recur_show_zero + ? ' (printed on invoices)' + : '' + ) + : '' ), align=>'left', } : () ), ], - [ { data => - ( $part_pkg->option('recur_fee') == 0 && $part_pkg->recur_show_zero ) - ? ' (printed on invoices)' - : '', - align => 'center', #? - colspan => 2, - }, - ], ( map { my $dst_pkg = $_->dst_pkg; [ diff --git a/httemplate/edit/part_pkg.cgi b/httemplate/edit/part_pkg.cgi index d36fac660..e5edcdedc 100755 --- a/httemplate/edit/part_pkg.cgi +++ b/httemplate/edit/part_pkg.cgi @@ -45,6 +45,7 @@ 'credit_weight' => 'Credit weight', 'agentnum' => 'Agent', 'setup_fee' => 'Setup fee', + 'setup_show_zero' => 'Show zero setup', 'recur_fee' => 'Recurring fee', 'recur_show_zero' => 'Show zero recurring', 'discountnum' => 'Offer discounts for longer terms', @@ -91,17 +92,23 @@ {field=>'disabled', type=>$disabled_type, value=>'Y'}, {field=>'disable_line_item_date_ranges', type=>$disabled_type, value=>'Y'}, - { type => 'tablebreak-tr-title', - value => 'Pricing', #better name? + { type => 'tablebreak-tr-title', + value => 'Pricing', #better name? }, - { field => 'plan', - type => 'selectlayers-select', - options => [ keys %plan_labels ], - labels => \%plan_labels, + { field => 'plan', + type => 'selectlayers-select', + options => [ keys %plan_labels ], + labels => \%plan_labels, onchange => 'aux_planchanged(what);', }, - { field => 'setup_fee', - type => 'money', + { field => 'setup_fee', + type => 'money', + onchange => 'setup_changed', + }, + { field => 'setup_show_zero', + type => 'checkbox', + value => 'Y', + disabled => sub { $setup_show_zero_disabled }, }, { field => 'freq', type => 'part_pkg_freq', @@ -334,6 +341,7 @@ my @taxproductnums = ( qw( setup recur ), sort (keys %taxproductnums) ); my %options = (); my $recur_disabled = 1; +my $setup_show_zero_disabled = 0; my $recur_show_zero_disabled = 1; my $pkgpart = ''; @@ -345,10 +353,12 @@ my $error_callback = sub { $opt->{action} = 'Custom' if $cgi->param('pkgnum'); + $setup_show_zero_disabled = ($cgi->param('setup_fee') > 0) ? 1 : 0; + $recur_disabled = $cgi->param('freq') ? 0 : 1; $recur_show_zero_disabled = $cgi->param('freq') - ? $cgi->param('recur_fee') ? 0 : 1 + ? $cgi->param('recur_fee') > 0 ? 1 : 0 : 1; foreach ($cgi->param) { @@ -394,8 +404,15 @@ my $new_object_callback = sub { my $edit_callback = sub { my( $cgi, $object, $fields, $opt ) = @_; + $setup_show_zero_disabled = ($object->option('setup_fee') > 0) ? 1 : 0; + $recur_disabled = $object->freq ? 0 : 1; + $recur_show_zero_disabled = + $object->freq + ? $object->option('recur_fee') > 0 ? 1 : 0 + : 1; + (@agent_type) = map {$_->typenum} qsearch('type_pkgs', { 'pkgpart' => $object->pkgpart } ); @@ -422,7 +439,7 @@ my $edit_callback = sub { %options = $object->options; - $object->set($_ => $object->option($_)) + $object->set($_ => $object->option($_, 1)) foreach (qw( setup_fee recur_fee disable_line_item_date_ranges )); $pkgpart = $object->pkgpart; @@ -531,15 +548,24 @@ my $javascript = <<'END'; } else { what.form.recur_fee.disabled = false; what.form.recur_fee.style.backgroundColor = '#ffffff'; - what.form.recur_show_zero.disabled = false; + recur_changed( what.form.recur_fee ); //what.form.recur_show_zero.style.backgroundColor= '#ffffff'; } } + function setup_changed(what) { + var setup = what.value; + if ( parseFloat(setup) == 0 ) { + what.form.setup_show_zero.disabled = false; + } else { + what.form.setup_show_zero.disabled = true; + } + } + function recur_changed(what) { var recur = what.value; - if ( recur == 0 ) { + if ( parseFloat(recur) == 0 ) { what.form.recur_show_zero.disabled = false; } else { what.form.recur_show_zero.disabled = true; -- 2.11.0