default to a session cookie instead of setting an explicit timeout, weird timezone...
[freeside.git] / bin / part_pkg-bulk_change
index 176965b..582ab39 100755 (executable)
@@ -16,9 +16,18 @@ adminsuidsetup $user;
 my %search = ();
 $search{'plan'} = $opt_p if $opt_p;
 $search{'comment'} = $opt_m if $opt_m;
-$search{'classnum'} = { op=>'NOT IN', value=>"($opt_C)" } if $opt_C;
 
-foreach my $part_pkg ( qsearch('part_pkg',\%search) ) {
+my $extra_sql = '';
+$extra_sql = ( keys(%search) ? 'AND' : 'WHERE' ).
+             " classnum NOT IN ($opt_C)"
+  if $opt_C;
+
+foreach my $part_pkg ( qsearch({ 'table'     => 'part_pkg',
+                                 'hashref'   => \%search,
+                                 'extra_sql' => $extra_sql,
+                              })
+                     )
+{
   next if ! $part_pkg->freq && $opt_r;
 
   if ( $opt_o ) {
@@ -30,6 +39,12 @@ foreach my $part_pkg ( qsearch('part_pkg',\%search) ) {
 
     my $part_pkg_option = qsearchs('part_pkg_option', \%hash);
 
+    unless ( defined $opt_v ) {
+      my $error = $part_pkg_option && $part_pkg_option->delete;
+      die $error if $error;
+      next;
+    }
+
     if ( $part_pkg_option ) {
       next if $part_pkg_option->optionvalue eq $opt_v;
       $part_pkg_option->optionvalue($opt_v);
@@ -121,7 +136,7 @@ Search options:
 
 Change options:
 
--o: part_pkg_option optionname
+-o: part_pkg_option optionname (use without -v to unset)
 
 -v: part_pkg_option optionvalue