X-Git-Url: http://git.freeside.biz/gitweb/?p=freeside.git;a=blobdiff_plain;f=httemplate%2Fbrowse%2Fpart_pkg.cgi;h=1053a6a33f0767de3bb6c9a98d0305d9b062b067;hp=1e8b510306dd8f6e034803a731da8b8dc7e819f9;hb=801a99f9f6f9cd38edd3423efd9298aa7d71a4b6;hpb=0806f9fdbf2086671c151b3bcb078dc008e96f6c diff --git a/httemplate/browse/part_pkg.cgi b/httemplate/browse/part_pkg.cgi index 1e8b51030..1053a6a33 100755 --- a/httemplate/browse/part_pkg.cgi +++ b/httemplate/browse/part_pkg.cgi @@ -27,6 +27,22 @@ 'html_foot' => $html_foot, ) %> +<%def .style> + + + <%init> my $curuser = $FS::CurrentUser::CurrentUser; @@ -45,7 +61,9 @@ die "access denied" my $conf = new FS::Conf; my $taxclasses = $conf->exists('enable_taxclasses'); +my $taxvendor = $conf->config('tax_data_vendor'); my $money_char = $conf->config('money_char') || '$'; +my $disable_counts = $conf->exists('config-disable_counts') ? 1 : 0; my $select = '*'; my $orderby = 'pkgpart'; @@ -129,40 +147,43 @@ my $count_cust_pkg_cancel = " AND cust_pkg.cancel IS NOT NULL AND cust_pkg.cancel != 0 "; -$select = " - - *, - - ( $count_cust_pkg - AND ( setup IS NULL OR setup = 0 ) - AND ( cancel IS NULL OR cancel = 0 ) - AND ( susp IS NULL OR susp = 0 ) - ) AS num_not_yet_billed, - - ( $count_cust_pkg - AND setup IS NOT NULL AND setup != 0 - AND ( cancel IS NULL OR cancel = 0 ) - AND ( susp IS NULL OR susp = 0 ) - ) AS num_active, - - ( $count_cust_pkg - AND ( cancel IS NULL OR cancel = 0 ) - AND susp IS NOT NULL AND susp != 0 - AND setup IS NOT NULL AND setup != 0 - ) AS num_suspended, - - ( $count_cust_pkg - AND ( cancel IS NULL OR cancel = 0 ) - AND susp IS NOT NULL AND susp != 0 - AND ( setup IS NULL OR setup = 0 ) - ) AS num_on_hold, - - ( $count_cust_pkg_cancel - AND (cust_pkg_next.pkgnum IS NULL - OR cust_pkg_next.pkgpart != cust_pkg.pkgpart) - ) AS num_cancelled +unless ( $disable_counts ) { + $select = " + + *, + + ( $count_cust_pkg + AND ( setup IS NULL OR setup = 0 ) + AND ( cancel IS NULL OR cancel = 0 ) + AND ( susp IS NULL OR susp = 0 ) + ) AS num_not_yet_billed, + + ( $count_cust_pkg + AND setup IS NOT NULL AND setup != 0 + AND ( cancel IS NULL OR cancel = 0 ) + AND ( susp IS NULL OR susp = 0 ) + ) AS num_active, + + ( $count_cust_pkg + AND ( cancel IS NULL OR cancel = 0 ) + AND susp IS NOT NULL AND susp != 0 + AND setup IS NOT NULL AND setup != 0 + ) AS num_suspended, + + ( $count_cust_pkg + AND ( cancel IS NULL OR cancel = 0 ) + AND susp IS NOT NULL AND susp != 0 + AND ( setup IS NULL OR setup = 0 ) + ) AS num_on_hold, + + ( $count_cust_pkg_cancel + AND (cust_pkg_next.pkgnum IS NULL + OR cust_pkg_next.pkgpart != cust_pkg.pkgpart) + ) AS num_cancelled + + "; +} -"; # About the num_cancelled expression: packages that were changed, but # kept the same pkgpart, are considered "moved", not "canceled" (because # this is the part_pkg UI). We could show the count of those but it's @@ -180,6 +201,7 @@ my $html_init = qq!

!; +$html_init .= include('.style'); $cgi->param('dummy', 1); @@ -518,7 +540,7 @@ if ( $acl_edit_global ) { { 'data' => ''. $part_pkg->get("num_$_"). - '', + ' ', 'align' => 'right', }, { @@ -529,7 +551,7 @@ if ( $acl_edit_global ) { : '' ), 'align' => 'left', - 'link' => ( $part_pkg->get("num_$_") + 'link' => ( $part_pkg->get("num_$_") || $disable_counts ? $cust_pkg_link. $part_pkg->pkgpart. ";magic=$magic" @@ -547,7 +569,7 @@ if ( $acl_edit_global ) { 'action' => "${p}edit/bulk-cust_pkg.html?". 'pkgpart='.$part_pkg->pkgpart, 'actionlabel' => 'Change Packages', - 'width' => 569, + 'width' => 960, 'height' => 210, ).' ]', 'align' => 'left', @@ -562,6 +584,49 @@ if ( $taxclasses ) { push @header, 'Taxclass'; push @fields, sub { shift->taxclass() || ' '; }; $align .= 'l'; +} elsif ( $taxvendor ) { + push @header, 'Tax product'; + my @classnums = ( 'setup', 'recur' ); + my @classnames = ( 'Setup', 'Recur' ); + foreach ( qsearch('usage_class', { disabled => '' }) ) { + push @classnums, $_->classnum; + push @classnames, $_->classname; + } + my $taxproduct_sub = sub { + my $ppt = shift; + '' . encode_entities($ppt->taxproduct) . '' + }; + my $taxproduct_list_sub = sub { + my $part_pkg = shift; + my $base_ppt = $part_pkg->taxproduct; + my $out = []; + if ( $base_ppt ) { + push @$out, [ + { 'data' => '', 'align' => 'left' }, + { 'data' => &$taxproduct_sub($base_ppt), 'align' => 'right' }, + ]; + } + if ( my $units_ppt = $part_pkg->units_taxproduct ) { + push @$out, [ + { 'data' => emt('Lines'), 'align' => 'left' }, + { 'data' => &$taxproduct_sub($units_ppt), 'align' => 'right' }, + ]; + } + for (my $i = 0; $i < scalar @classnums; $i++) { + my $num = $part_pkg->option('usage_taxproductnum_' . $classnums[$i]); + next if !$num; + my $ppt = FS::part_pkg_taxproduct->by_key($num); + push @$out, [ + { 'data' => $classnames[$i], 'align' => 'left', }, + { 'data' => &$taxproduct_sub($ppt), 'align' => 'right' }, + ]; + } + $out; + }; + push @fields, $taxproduct_list_sub; + $align .= 'l'; } # make a table of report class optionnames => the actual @@ -602,7 +667,9 @@ push @fields, sort grep { $options{$_} =~ /\S/ } grep { $_ !~ /^(setup|recur)_fee$/ - and $_ !~ /^report_option_\d+$/ } + and $_ !~ /^report_option_\d+$/ + and $_ !~ /^usage_taxproductnum_/ + } keys %options ); if ( @report_options ) { @@ -660,7 +727,7 @@ push @fields, [ { - 'data' => ''. $pkg_svc->quantity. '', + 'data' => ''. $pkg_svc->quantity. ' ', 'align' => 'right' }, { @@ -736,8 +803,32 @@ if ( $acl_edit_bulk ) { $align .= 'c'; $html_form = qq!
!; $html_foot = include('/search/elements/checkbox-foot.html', - submit => 'edit report classes', # for now it's only report classes - ) . '
'; + actions => [ + { label => 'edit packages', + onclick=> include('/elements/popup_link_onclick.html', + 'label' => 'edit', + 'js_action' => qq{ + '${p}edit/bulk-part_pkg.html?' + \$('input[name=pkgpart]').serialize() + }, + 'actionlabel' => 'Bulk edit packages', + 'width' => 960, + 'height' => 420, + ) + }, + { label => 'change customers packages', + onclick=> include('/elements/popup_link_onclick.html', + 'label' => 'change', + 'js_action' => qq{ + '${p}edit/bulk-cust_pkg.html?' + \$('input[name=pkgpart]').serialize() + }, + 'actionlabel' => 'Change customer packages', + 'width' => 960, + 'height' => 420, + ) + }, + ], + ). + ''; } my @menubar;