[freeside-commits] branch FREESIDE_3_BRANCH updated. a2513350a21ff9000b36ed5e892b18ecdc514712

Ivan Kohler ivan at freeside.biz
Tue Dec 19 12:58:35 PST 2017


The branch, FREESIDE_3_BRANCH has been updated
       via  a2513350a21ff9000b36ed5e892b18ecdc514712 (commit)
      from  a5da6f3448fb17b4f6e16994a5decab2cafb9827 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit a2513350a21ff9000b36ed5e892b18ecdc514712
Author: Ivan Kohler <ivan at freeside.biz>
Date:   Tue Dec 19 12:58:34 2017 -0800

    add -u custnum_filename, -k skip_pkgpart and -v verbose, RT#79001

diff --git a/bin/bulk_void b/bin/bulk_void
index 8f0c882a8..01fa3fe4b 100755
--- a/bin/bulk_void
+++ b/bin/bulk_void
@@ -3,10 +3,12 @@
 use strict;
 use warnings;
 use vars qw( %opt );
+use Date::Format;
+use File::Slurp;
 use FS::Misc::Getopt;
 use FS::Record qw(qsearch qsearchs dbh);
 
-getopts('cpiXr:t:');
+getopts('cpiXr:t:u:v');
 
 my $dbh = dbh;
 $FS::UID::AutoCommit = 0;
@@ -16,12 +18,18 @@ sub usage() {
                   -r void_reason
                   { -c | -p | -i }
                   [ -t payby ]
+                  [ -u filename ]
+                  [ -k pkgpart ]
+                  [ -v ]
                   [ -X ]
                   <user>
 -s, -e: date range (required)
 -r: void reason text (required)
 -c, -p, -i: void credits, payments, invoices
+-u: specifies a filename of customer numbers - only void for those customers
+-k: skip invoices with only this pkgpart
 -t: only void payments with this payby
+-v: verbose - show more detail
 -X: commit changes
 ";
 }
@@ -35,8 +43,13 @@ print "DRY RUN--changes will not be committed.\n" unless $opt{X};
 my %search = ();
 $search{payby} = $opt{t} if $opt{t} && $opt{p};
 
-my $date = (keys %search ? ' AND ' : ' WHERE ').
-           " _date >= $opt{start} AND _date <= $opt{end}";
+my $extra_sql = (keys %search ? ' AND ' : ' WHERE ').
+                " _date >= $opt{start} AND _date <= $opt{end}";
+
+if ( $opt{u} ) {
+  my @custnums = map { chomp; $_; } read_file($opt{u});
+  $extra_sql .= ' AND custnum IN ('. join(',', @custnums). ') ';
+}
 
 my %tables = (
   c => 'cust_credit',
@@ -46,20 +59,37 @@ my %tables = (
 
 my $reason = $opt{r};
 
+
 foreach my $k (keys %tables) {
   next unless $opt{$k};
   my $table = $tables{$k};
   debug("$table:");
   my $done_count = 0;
   my $error_count = 0;
+  my $pkey = '';
 
   my $cursor = FS::Cursor->new({
     table     => $table,
     hashref   => \%search,
-    extra_sql => $date,
+    extra_sql => $extra_sql,
   });
   my $error;
   while (my $record = $cursor->fetch) {
+
+    if ( $opt{k} && $opt{i} ) {
+      my @other_pkgs = grep { $_->pkgpart != $opt{k} }
+                         grep $_, map $_->cust_pkg, $record->cust_bill_pkg;
+      next if ! @other_pkgs;
+    }
+
+    if ( $opt{v} ) {
+      $pkey ||= $record->primary_key;
+      my $num = $record->get($pkey);
+      my $date = time2str('%x', $record->_date);
+      my $name = $record->cust_main->name;
+      warn "Voiding $table #$num ($date) for $name\n";
+    }
+
     $error = $record->void($reason);
     if ( $error ) {
       $error = "$table #" . $record->get($record->primary_key) . ": $error";

-----------------------------------------------------------------------

Summary of changes:
 bin/bulk_void | 38 ++++++++++++++++++++++++++++++++++----
 1 file changed, 34 insertions(+), 4 deletions(-)




More information about the freeside-commits mailing list