From: ivan Date: Sat, 20 Oct 2001 12:18:00 +0000 (+0000) Subject: setup and recurring fee tax exempt flags, UI to edit X-Git-Tag: freeside_1_4_0pre11~274 X-Git-Url: http://git.freeside.biz/gitweb/?p=freeside.git;a=commitdiff_plain;h=60c837e0aaf454dfa0b0c0283dc36928782d1b6c;hp=c095a5391475464fa816b7732c40ffa7d293ac6d setup and recurring fee tax exempt flags, UI to edit rework part_pkg editing UI some more --- diff --git a/FS/FS/cust_main.pm b/FS/FS/cust_main.pm index dce73c0ba..3895514d4 100644 --- a/FS/FS/cust_main.pm +++ b/FS/FS/cust_main.pm @@ -813,6 +813,7 @@ sub bill { # & generate invoice database. my( $total_setup, $total_recur ) = ( 0, 0 ); + my( $taxable_setup, $taxable_recur ) = ( 0, 0 ); my @cust_bill_pkg = (); foreach my $cust_pkg ( @@ -927,37 +928,49 @@ sub bill { push @cust_bill_pkg, $cust_bill_pkg; $total_setup += $setup; $total_recur += $recur; + $taxable_setup += $setup + unless $part_pkg->dbdef_table->column('setuptax') + || $part_pkg->setuptax =~ /^Y$/i; + $taxable_recur += $recur + unless $part_pkg->dbdef_table->column('recurtax') + || $part_pkg->recurtax =~ /^Y$/i; } } } my $charged = sprintf( "%.2f", $total_setup + $total_recur ); + my $taxable_charged = sprintf( "%.2f", $taxable_setup + $taxable_recur ); unless ( @cust_bill_pkg ) { $dbh->commit or die $dbh->errstr if $oldAutoCommit; return ''; } - unless ( $self->tax =~ /Y/i || $self->payby eq 'COMP' ) { + unless ( $self->tax =~ /Y/i + || $self->payby eq 'COMP' + || $taxable_charged == 0 ) { my $cust_main_county = qsearchs('cust_main_county',{ 'state' => $self->state, 'county' => $self->county, 'country' => $self->country, } ); my $tax = sprintf( "%.2f", - $charged * ( $cust_main_county->getfield('tax') / 100 ) + $taxable_charged * ( $cust_main_county->getfield('tax') / 100 ) ); - $charged = sprintf( "%.2f", $charged+$tax ); - - my $cust_bill_pkg = new FS::cust_bill_pkg ({ - 'pkgnum' => 0, - 'setup' => $tax, - 'recur' => 0, - 'sdate' => '', - 'edate' => '', - }); - push @cust_bill_pkg, $cust_bill_pkg; + + if ( $tax > 0 ) { + $charged = sprintf( "%.2f", $charged+$tax ); + + my $cust_bill_pkg = new FS::cust_bill_pkg ({ + 'pkgnum' => 0, + 'setup' => $tax, + 'recur' => 0, + 'sdate' => '', + 'edate' => '', + }); + push @cust_bill_pkg, $cust_bill_pkg; + } } my $cust_bill = new FS::cust_bill ( { @@ -1827,7 +1840,7 @@ sub append_fuzzyfiles { =head1 VERSION -$Id: cust_main.pm,v 1.41 2001-10-15 12:16:42 ivan Exp $ +$Id: cust_main.pm,v 1.42 2001-10-20 12:17:59 ivan Exp $ =head1 BUGS diff --git a/FS/FS/part_pkg.pm b/FS/FS/part_pkg.pm index d84b9c5b7..ceb2a0128 100644 --- a/FS/FS/part_pkg.pm +++ b/FS/FS/part_pkg.pm @@ -52,6 +52,10 @@ inherits from FS::Record. The following fields are currently supported: =item recur - Recurring fee expression +=item setuptax - Setup fee tax exempt flag, empty or `Y' + +=item recurtax - Recurring fee tax exempt flag, empty or `Y' + =item plan - Price plan =item plandata - Price plan data @@ -126,7 +130,7 @@ insert and replace methods. sub check { my $self = shift; - $self->ut_numbern('pkgpart') + my $error = $self->ut_numbern('pkgpart') || $self->ut_text('pkg') || $self->ut_text('comment') || $self->ut_anything('setup') @@ -135,6 +139,15 @@ sub check { || $self->ut_alphan('plan') || $self->ut_anything('plandata') ; + return $error if $error; + + $self->setuptax =~ /^(Y?)$/ or return "Illegal setuptax: ". $self->setuptax; + $self->setuptax($1); + + $self->recurtax =~ /^(Y?)$/ or return "Illegal recrutax: ". $self->recurtax; + $self->recurtax($1); + + ''; } =item pkg_svc @@ -172,7 +185,7 @@ sub svcpart { =head1 VERSION -$Id: part_pkg.pm,v 1.3 2001-10-15 10:42:28 ivan Exp $ +$Id: part_pkg.pm,v 1.4 2001-10-20 12:17:59 ivan Exp $ =head1 BUGS diff --git a/README.1.4.0pre3-4 b/README.1.4.0pre3-4 index 49ca5a4d0..0027d3450 100644 --- a/README.1.4.0pre3-4 +++ b/README.1.4.0pre3-4 @@ -16,6 +16,8 @@ ALTER TABLE cust_pay_batch ADD paybatchnum integer; CREATE UNIQUE INDEX cust_pay_batch_pkey ON cust_pay_batch ( paybatchnum ); ALTER TABLE part_pkg ADD plan varchar NULL; ALTER TABLE part_pkg ADD plandata varchar NULL; +ALTER TABLE part_pkg ADD setuptax char(1) NULL; +ALTER TABLE part_pkg ADD recurtax char(1) NULL; Run bin/dbdef-create diff --git a/bin/fs-setup b/bin/fs-setup index 96ec2b74b..5927f88f7 100755 --- a/bin/fs-setup +++ b/bin/fs-setup @@ -1,6 +1,6 @@ #!/usr/bin/perl -Tw # -# $Id: fs-setup,v 1.62 2001-10-15 10:42:28 ivan Exp $ +# $Id: fs-setup,v 1.63 2001-10-20 12:17:59 ivan Exp $ #to delay loading dbdef until we're ready BEGIN { $FS::Record::setup_hack = 1; } @@ -540,6 +540,8 @@ sub tables_hash_hack { 'setup', @perl_type, 'freq', 'int', '', '', #billing frequency (months) 'recur', @perl_type, + 'setuptax', 'char', 'NULL', 1, + 'recurtax', 'char', 'NULL', 1, 'plan', 'varchar', 'NULL', '', 'plandata', 'varchar', 'NULL', '', ], diff --git a/htetc/global.asa b/htetc/global.asa index c3393ad67..a5863c327 100644 --- a/htetc/global.asa +++ b/htetc/global.asa @@ -12,7 +12,7 @@ use FS::part_pkg; use FS::pkg_svc; use FS::cust_pkg; use FS::cust_svc; -use FS::CGI qw(header menubar popurl table ntable); +use FS::CGI qw(header menubar popurl table itable ntable); sub Script_OnStart { $cgi = new CGI; diff --git a/htetc/handler.pl b/htetc/handler.pl index d747fe464..e537d26fc 100644 --- a/htetc/handler.pl +++ b/htetc/handler.pl @@ -66,7 +66,7 @@ sub handler use FS::pkg_svc; use FS::cust_pkg; use FS::cust_svc; - use FS::CGI qw(header menubar popurl table ntable); + use FS::CGI qw(header menubar popurl table itable ntable); $cgi = new CGI; &cgisuidsetup($cgi); diff --git a/httemplate/browse/part_pkg.cgi b/httemplate/browse/part_pkg.cgi index e20ba2404..30f994872 100755 --- a/httemplate/browse/part_pkg.cgi +++ b/httemplate/browse/part_pkg.cgi @@ -1,5 +1,5 @@ <% -# +# use strict; use vars qw( $cgi $p $part_pkg ); @@ -21,9 +21,9 @@ $p = popurl(2); print $cgi->header( '-expires' => 'now' ), header("Package Definition Listing",menubar( 'Main Menu' => $p, )), "One or more services are grouped together into a package and given", - " pricing information. Customers purchase packages, not services.

", + " pricing information. Customers purchase packages", + " rather than purchase services directly.

", &table(), < Package Comment diff --git a/httemplate/docs/schema.html b/httemplate/docs/schema.html index 88b4cb2b1..145d55fc2 100644 --- a/httemplate/docs/schema.html +++ b/httemplate/docs/schema.html @@ -196,6 +196,8 @@
  • setup - setup fee expression
  • freq - recurring frequency (months)
  • recur - recurring fee expression +
  • setuptax - Setup fee tax exempt flag, empty or `Y' +
  • recurtax - Recurring fee tax exempt flag, empty or `Y'
  • plan - price plan
  • plandata - additional price plan data diff --git a/httemplate/docs/upgrade8.html b/httemplate/docs/upgrade8.html index c317e88c8..a368d4488 100644 --- a/httemplate/docs/upgrade8.html +++ b/httemplate/docs/upgrade8.html @@ -137,6 +137,8 @@ ALTER TABLE cust_refund ADD custnum integer; ALTER TABLE cust_pkg ADD manual_flag char(1) NULL; ALTER TABLE part_pkg ADD plan varchar NULL; ALTER TABLE part_pkg ADD plandata varchar NULL; +ALTER TABLE part_pkg ADD setuptax char(1) NULL; +ALTER TABLE part_pkg ADD recurtax char(1) NULL; CREATE INDEX cust_main3 ON cust_main ( referral_custnum ); CREATE INDEX cust_credit_bill1 ON cust_credit_bill ( crednum ); CREATE INDEX cust_credit_bill2 ON cust_credit_bill ( invnum ); diff --git a/httemplate/edit/part_pkg.cgi b/httemplate/edit/part_pkg.cgi index 5eccc1e1e..fee0b411e 100755 --- a/httemplate/edit/part_pkg.cgi +++ b/httemplate/edit/part_pkg.cgi @@ -1,4 +1,4 @@ - + <% @@ -34,8 +34,8 @@ if ( $cgi->param('clone') ) { } unless ( $part_pkg->plan ) { #backwards-compat $part_pkg->plan('flat'); - $part_pkg->plandata("setup=". $part_pkg->setup. "\n". - "recur=". $part_pkg->recur. "\n"); + $part_pkg->plandata("setup_fee=". $part_pkg->setup. "\n". + "recur_fee=". $part_pkg->recur. "\n"); } $action ||= $part_pkg->pkgpart ? 'Edit' : 'Add'; my $hashref = $part_pkg->hashref; @@ -76,28 +76,44 @@ print '
    '; #print qq!!, print "Package Part #", $hashref->{pkgpart} ? $hashref->{pkgpart} : "(NEW)"; +print itable("#cccccc",2), <Package (customer-visable) +Comment (customer-hidden) +Frequency (months) of recurring fee +Setup fee tax exempt +END + +print '{setuptax} eq "Y"; +print '>'; + print < -Package (customer-visable) -Comment (customer-hidden) + +Recurring fee tax exempt +END -Frequency (months) of recurring fee +print '{recurtax} eq "Y"; +print '>'; - +print ''; +my $thead = "\n\n". ntable('#cccccc', 2). <Quan.Service END unless ( $cgi->param('clone') ) { - print <
    - - + #print <' if $count == 0 ; - print qq!"; - $count++; - if ($count == 2) - { - print ''; - $count = 0; + qq!">!, $part_svc->getfield('svc'), ""; +# print "
    Quan.ServiceQuan.Service
    ', $thead; +

    Enter the quantity of each service this package includes.

    END } -my $count = 0; my @fixups = (); -foreach my $part_svc ( ( qsearch( 'part_svc', {} ) ) ) { +my $count = 0; +my $columns = 3; +my @part_svc = qsearch( 'part_svc', {} ); +foreach my $part_svc ( @part_svc ) { my $svcpart = $part_svc->svcpart; my $pkg_svc = qsearchs( 'pkg_svc', { 'pkgpart' => $cgi->param('clone') || $part_pkg->pkgpart, @@ -112,16 +128,16 @@ foreach my $part_svc ( ( qsearch( 'part_svc', {} ) ) ) { push @fixups, "pkg_svc$svcpart"; unless ( defined ($cgi->param('clone')) && $cgi->param('clone') ) { - print '
    quantity || 0, qq!">!, $part_svc->getfield('svc'), "
    $thead" if ++$count == int(scalar(@part_svc) / 2); + $count+=1; + foreach ( 1 .. $columns-1 ) { + print "$thead" + if $count == int( $_ * scalar(@part_svc) / $columns ); } } else { print qq!"; + print ""; + #print ""; } # prolly should be in database @@ -216,6 +232,12 @@ function fixup(what) { <% foreach my $f ( qw( pkg comment freq ), @fixups ) { %> what.<%= $f %>.value = document.dummy.<%= $f %>.value; <% } %> +<% foreach my $f ( qw( setuptax recurtax ) ) { %> + if (document.dummy.<%= $f %>.checked) + what.<%= $f %>.value = 'Y'; + else + what.<%= $f %>.value = ''; +<% } %> what.plan.value = document.dummy.plan.options[document.dummy.plan.selectedIndex].value; <% foreach my $p ( keys %plans ) { %> if ( what.plan.value == "<%= $p %>" ) { @@ -246,6 +268,8 @@ if (document.getElementById) { + + <% foreach my $f ( @fixups ) { %> <% } %> @@ -257,17 +281,20 @@ if ( $cgi->param('clone') ) { if ( $cgi->param('pkgnum') ) { print qq!!; } -print qq!!, %> + +<%= itable("#cccccc",2) %> + <% my $href = $plans{$layer}->{'fields'}; foreach my $field ( keys %{ $href } ) { %> -<%= $href->{$field}{'name'} %>: -
    +<%= $href->{$field}{'name'} %> + <% } %> + - +

    Setup expression

    Recurring espression

    diff --git a/httemplate/edit/process/cust_main.cgi b/httemplate/edit/process/cust_main.cgi index cc5efd6b1..625a85052 100755 --- a/httemplate/edit/process/cust_main.cgi +++ b/httemplate/edit/process/cust_main.cgi @@ -1,5 +1,5 @@ <% -# $Id: cust_main.cgi,v 1.4 2001-09-04 15:06:03 ivan Exp $ +# $Id: cust_main.cgi,v 1.5 2001-10-20 12:18:00 ivan Exp $ use strict; use vars qw( $cgi $payby @invoicing_list $new $custnum $error ); @@ -20,7 +20,7 @@ $error = ''; #unmunge stuff -$cgi->param('tax','') unless defined($cgi->param('tax')); +$cgi->param('tax','') unless defined $cgi->param('tax'); $cgi->param('refnum', (split(/:/, ($cgi->param('refnum'))[0] ))[0] ); diff --git a/httemplate/edit/process/part_pkg.cgi b/httemplate/edit/process/part_pkg.cgi index 6cfaa122e..cd799b5b9 100755 --- a/httemplate/edit/process/part_pkg.cgi +++ b/httemplate/edit/process/part_pkg.cgi @@ -1,5 +1,5 @@ <% -# +# use strict; use vars qw( $cgi $pkgpart $old $new $part_svc $error $dbh ); @@ -26,12 +26,18 @@ $cgi->param('plandata', join('', map { "$_=". $cgi->param($_). "\n" } @plandata ) ); +$cgi->param('setuptax','') unless defined $cgi->param('setuptax'); +$cgi->param('recurtax','') unless defined $cgi->param('recurtax'); + $new = new FS::part_pkg ( { map { $_, scalar($cgi->param($_)); } fields('part_pkg') } ); +warn "setuptax: ". $new->setuptax; +warn "recurtax: ". $new->recurtax; + #most of the stuff below should move to part_pkg.pm foreach $part_svc ( qsearch('part_svc', {} ) ) { diff --git a/httemplate/edit/svc_acct.cgi b/httemplate/edit/svc_acct.cgi index 8646bb707..3d0bb0134 100755 --- a/httemplate/edit/svc_acct.cgi +++ b/httemplate/edit/svc_acct.cgi @@ -1,5 +1,5 @@ <% -# +# use strict; use vars qw( $conf $cgi @shells $action $svcnum $svc_acct $pkgnum $svcpart @@ -116,7 +116,7 @@ print 'Service # '. ( $svcnum ? "$svcnum" : " (NEW)" ). '
    '. END -print &itable("#cccccc"), < Username