invoice sections by location, #23820
[freeside.git] / FS / FS / cust_main_county.pm
index db6be75..a61d67e 100644 (file)
@@ -137,33 +137,6 @@ sub check {
 
 }
 
-sub taxname {
-  my $self = shift;
-  if ( $self->dbdef_table->column('taxname') ) {
-    return $self->setfield('taxname', $_[0]) if @_;
-    return $self->getfield('taxname');
-  }  
-  return '';
-}
-
-sub setuptax {
-  my $self = shift;
-  if ( $self->dbdef_table->column('setuptax') ) {
-    return $self->setfield('setuptax', $_[0]) if @_;
-    return $self->getfield('setuptax');
-  }  
-  return '';
-}
-
-sub recurtax {
-  my $self = shift;
-  if ( $self->dbdef_table->column('recurtax') ) {
-    return $self->setfield('recurtax', $_[0]) if @_;
-    return $self->getfield('recurtax');
-  }  
-  return '';
-}
-
 =item label OPTIONS
 
 Returns a label looking like "Anytown, Alameda County, CA, US".
@@ -174,13 +147,10 @@ If the taxname field is set, it will look like
 If the taxclass is set, then it will be
 "Anytown, Alameda County, CA, US (International)".
 
-Currently it will not contain the district, even if the city+county+state
-is not unique.
-
-OPTIONS may contain "no_taxclass" (hides taxclass) and/or "no_city"
-(hides city).  It may also contain "out", in which case, if this 
-region (district+city+county+state+country) contains no non-zero 
-taxes, the label will read "Out of taxable region(s)".
+OPTIONS may contain "with_taxclass", "with_city", and "with_district" to show
+those fields.  It may also contain "out", in which case, if this region 
+(district+city+county+state+country) contains no non-zero taxes, the label 
+will read "Out of taxable region(s)".
 
 =cut
 
@@ -202,12 +172,15 @@ sub label {
   my $label = $self->country;
   $label = $self->state.", $label" if $self->state;
   $label = $self->county." County, $label" if $self->county;
-  if (!$opt{no_city}) {
+  if ($opt{with_city}) {
     $label = $self->city.", $label" if $self->city;
+    if ($opt{with_district} and $self->district) {
+      $label = $self->district . ", $label";
+    }
   }
   # ugly labels when taxclass and taxname are both non-null...
   # but this is how the tax report does it
-  if (!$opt{no_taxclass}) {
+  if ($opt{with_taxclass}) {
     $label = "$label (".$self->taxclass.')' if $self->taxclass;
   }
   $label = $self->taxname." ($label)" if $self->taxname;
@@ -498,6 +471,8 @@ sub taxline {
         'taxnum'      => $self->taxnum,
         'taxtype'     => ref($self),
         'cents'       => $this_tax_cents,
+        'pkgnum'      => $cust_bill_pkg->pkgnum,
+        'locationnum' => $cust_bill_pkg->cust_pkg->tax_locationnum,
         'taxable_cust_bill_pkg' => $cust_bill_pkg,
         'tax_cust_bill_pkg'     => $tax_item,
     });
@@ -510,8 +485,10 @@ sub taxline {
   # now round and distribute
   my $extra_cents = sprintf('%.2f', $taxable_cents * $self->tax / 100) * 100
                     - $tax_cents;
+  # make sure we have an integer
+  $extra_cents = sprintf('%.0f', $extra_cents);
   if ( $extra_cents < 0 ) {
-    die "nonsense extra_cents value $extra_cents"; # because seriously, wtf
+    die "nonsense extra_cents value $extra_cents";
   }
   $tax_cents += $extra_cents;
   my $i = 0;