X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=httemplate%2Fbrowse%2Fpart_pkg.cgi;h=1053a6a33f0767de3bb6c9a98d0305d9b062b067;hb=01721976fa3324f41a3093cda68bc38a7eec5ff5;hp=07f104e551be6f3df2147d65521abc9766a89a80;hpb=2b2dd969f3c18751afc583ad1e836ab8e6f73b5d;p=freeside.git
diff --git a/httemplate/browse/part_pkg.cgi b/httemplate/browse/part_pkg.cgi
index 07f104e55..1053a6a33 100755
--- a/httemplate/browse/part_pkg.cgi
+++ b/httemplate/browse/part_pkg.cgi
@@ -27,6 +27,22 @@
'html_foot' => $html_foot,
)
%>
+<%def .style>
+
+
+%def>
<%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';
@@ -88,6 +106,14 @@ if ( $cgi->param('missing_recur_fee') ) {
)";
}
+if ( $cgi->param('ratenum') =~ /^(\d+)$/ ) {
+ push @where, "EXISTS( SELECT 1 FROM part_pkg_option
+ WHERE optionname LIKE '%ratenum'
+ AND optionvalue = '$1'
+ AND part_pkg_option.pkgpart = part_pkg.pkgpart
+ )";
+}
+
if ( $cgi->param('family') =~ /^(\d+)$/ ) {
$family_pkgpart = $1;
push @where, "family_pkgpart = $1";
@@ -121,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
@@ -172,6 +201,7 @@ my $html_init = qq!
!;
+$html_init .= include('.style');
$cgi->param('dummy', 1);
@@ -510,7 +540,7 @@ if ( $acl_edit_global ) {
{
'data' => ''.
$part_pkg->get("num_$_").
- '',
+ ' ',
'align' => 'right',
},
{
@@ -521,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"
@@ -539,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',
@@ -554,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
@@ -594,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 ) {
@@ -652,7 +727,7 @@ push @fields,
[
{
- 'data' => ''. $pkg_svc->quantity. '',
+ 'data' => ''. $pkg_svc->quantity. ' ',
'align' => 'right'
},
{
@@ -728,8 +803,32 @@ if ( $acl_edit_bulk ) {
$align .= 'c';
$html_form = qq!