work around ffiec bug and add year 2010
[freeside.git] / FS / FS / cust_main.pm
index 1684034..c0fb5d2 100644 (file)
@@ -3020,7 +3020,7 @@ sub bill {
 
   foreach my $pass (@passes) { # keys %cust_bill_pkg ) {
 
-    my @cust_bill_pkg = @{ $cust_bill_pkg{$pass} };
+    my @cust_bill_pkg = _omit_zero_value_bundles(@{ $cust_bill_pkg{$pass} });
 
     next unless @cust_bill_pkg; #don't create an invoice w/o line items
 
@@ -3066,6 +3066,9 @@ sub bill {
           }
         }
 
+        # it's silly to have a zero value postal_pkg, but....
+        @cust_bill_pkg = _omit_zero_value_bundles(@cust_bill_pkg);
+
       }
 
     }
@@ -3140,24 +3143,12 @@ sub bill {
       return "can't create invoice for customer #". $self->custnum. ": $error";
     }
 
-    my @cust_bill_pkg_bundle = ();
     foreach my $cust_bill_pkg ( @cust_bill_pkg ) {
       $cust_bill_pkg->invnum($cust_bill->invnum); 
-      if (scalar(@cust_bill_pkg_bundle) && !$cust_bill_pkg->pkgpart_override) {
-        $error = $self->_insert_cust_bill_pkg_bundle( @cust_bill_pkg_bundle );
-        if ( $error ) {
-          $dbh->rollback if $oldAutoCommit;
-          return $error;
-        }
-        @cust_bill_pkg_bundle = ();
-      }
-      push @cust_bill_pkg_bundle, $cust_bill_pkg;
-    }
-    if (scalar(@cust_bill_pkg_bundle)) {
-      $error = $self->_insert_cust_bill_pkg_bundle( @cust_bill_pkg_bundle );
+      my $error = $cust_bill_pkg->insert;
       if ( $error ) {
         $dbh->rollback if $oldAutoCommit;
-        return $error;
+        return "can't create invoice line item: $error";
       }
     }
 
@@ -3177,19 +3168,25 @@ sub bill {
   ''; #no error
 }
 
-#insert line items while discarding bundled packages of 0 value
-sub _insert_cust_bill_pkg_bundle {
-  my $self = shift;
-  my @cust_bill_pkg = @_;
+#discard bundled packages of 0 value
+sub _omit_zero_value_bundles {
 
+  my @cust_bill_pkg = ();
+  my @cust_bill_pkg_bundle = ();
   my $sum = 0;
-  $sum += $_->setup + $_->recur foreach @cust_bill_pkg;
-  return '' unless $sum > 0;
 
-  foreach my $cust_bill_pkg ( @cust_bill_pkg ) {
-    my $error = $cust_bill_pkg->insert;
-    return "can't create invoice line item: $error" if $error;
+  foreach my $cust_bill_pkg ( @_ ) {
+    if (scalar(@cust_bill_pkg_bundle) && !$cust_bill_pkg->pkgpart_override) {
+      push @cust_bill_pkg, @cust_bill_pkg_bundle if $sum > 0;
+      @cust_bill_pkg_bundle = ();
+      $sum = 0;
+    }
+    $sum += $cust_bill_pkg->setup + $cust_bill_pkg->recur;
+    push @cust_bill_pkg_bundle, $cust_bill_pkg;
   }
+  push @cust_bill_pkg, @cust_bill_pkg_bundle if $sum > 0;
+
+  (@cust_bill_pkg);
 
 }
 
@@ -3476,6 +3473,7 @@ sub _make_lines {
     my %param = ( 'precommit_hooks'     => $precommit_hooks,
                   'increment_next_bill' => $increment_next_bill,
                   'discounts'           => \@discounts,
+                  'real_pkgpart'        => $real_pkgpart,
                 );
 
     my $method = $options{cancel} ? 'calc_cancel' : 'calc_recur';