per address block ip auto assignment and auto router selection
[freeside.git] / FS / FS / cust_main.pm
index 76ed76c..b348aaa 100644 (file)
@@ -227,6 +227,8 @@ Card Verification Value, "CVV2" (also known as CVC2 or CID), the 3 or 4 digit nu
 
 =item spool_cdr - Enable individual CDR spooling, empty or `Y'
 
+=item dundate - a suggestion to events (see L<FS::part_bill_event">) to delay until this unix timestamp
+
 =item squelch_cdr - Discourage individual CDR printing, empty or `Y'
 
 =back
@@ -1962,7 +1964,12 @@ sub bill_and_collect {
                          $self->ncancelled_pkgs;
 
   foreach my $cust_pkg ( @cancel_pkgs ) {
-    my $error = $cust_pkg->cancel;
+    my $cpr = $cust_pkg->last_cust_pkg_reason('expire');
+    my $error = $cust_pkg->cancel($cpr ? ( 'reason' => $cpr->reasonnum,
+                                           'reason_otaker' => $cpr->otaker
+                                         )
+                                       : ()
+                                 );
     warn "Error cancelling expired pkg ". $cust_pkg->pkgnum.
          " for custnum ". $self->custnum. ": $error"
       if $error;
@@ -1988,7 +1995,14 @@ sub bill_and_collect {
          $self->ncancelled_pkgs;
 
   foreach my $cust_pkg ( @susp_pkgs ) {
-    my $error = $cust_pkg->suspend;
+    my $cpr = $cust_pkg->last_cust_pkg_reason('adjourn')
+      if ($cust_pkg->adjourn && $cust_pkg->adjourn < $^T);
+    my $error = $cust_pkg->suspend($cpr ? ( 'reason' => $cpr->reasonnum,
+                                            'reason_otaker' => $cpr->otaker
+                                          )
+                                        : ()
+                                  );
+
     warn "Error suspending package ". $cust_pkg->pkgnum.
          " for custnum ". $self->custnum. ": $error"
       if $error;
@@ -2964,14 +2978,16 @@ sub due_cust_event {
   # 3: insert
   ##
 
-  foreach my $cust_event ( @cust_event ) {
+  unless( $opt{testonly} ) {
+    foreach my $cust_event ( @cust_event ) {
 
-    my $error = $cust_event->insert();
-    if ( $error ) {
-      $dbh->rollback if $oldAutoCommit;
-      return $error;
-    }
+      my $error = $cust_event->insert();
+      if ( $error ) {
+        $dbh->rollback if $oldAutoCommit;
+        return $error;
+      }
                                        
+    }
   }
 
   $dbh->commit or die $dbh->errstr if $oldAutoCommit;