fix wa_tax_rate_update script to skip zero rates, #73226
[freeside.git] / bin / rollback
1 #!/usr/bin/perl
2
3 use FS::UID qw(adminsuidsetup);
4 use FS::Record qw(qsearch qsearchs fields);
5
6 use FS::svc_acct;
7
8 #cust_pkg pkgnum 240133 241206 replace_old
9 #cust_svc svcnum 31102 32083 delete
10 #svc_acct svcnum 37162 37652 delete
11 my($user, $table, $pkey, $start, $end, $action) = @ARGV;
12
13 adminsuidsetup $user or die;
14
15 #eval "use FS::h_$table;";
16 #die $@ if $@;
17 eval "use FS::$table;";
18 die $@ if $@;
19
20 my @history = grep { $_->historynum <= $end } qsearch("h_$table", { 'historynum' => { op=>'>=', value=>$start }, history_action => $action } );
21
22 my %seen;
23 foreach my $h (@history) {
24   my $error;
25   if ( $action eq 'replace_old' ) {
26     my $old = qsearchs($table, { $pkey => $h->get($pkey) } );
27     unless ( $old ) { die "can't find $table $pkey ". $h->get($pkey). "\n"; }
28     my $new = "FS::$table"->new( { map { $_ => $h->get($_) } fields($table) } );
29     $error = $new->replace($old);
30   } elsif ( $action eq 'delete' ) {
31     next if $seen{$h->get($pkey)}++;
32     my $new = "FS::$table"->new( { map { $_ => $h->get($_) } fields($table) } );
33     $error = $new->insert;
34   } else {
35     die "unknown action $action\n";
36   }
37   die $error if $error;
38 }