#!/usr/bin/perl
use strict;
-use vars qw( $opt_p );
+use vars qw( $opt_a $opt_p $opt_t $opt_k $opt_c );
use Getopt::Std;
use FS::UID qw(adminsuidsetup);
-use FS::Record qw(qsearchs);
+use FS::Record qw(qsearch qsearchs);
use FS::cust_main;
+use FS::cust_tag;
+use FS::cust_pkg;
-getopts('p:');
+getopts('a:p:t:k:c:');
my $user = shift or &usage;
adminsuidsetup $user;
$FS::cust_main::skip_fuzzyfiles = 1;
$FS::cust_main::skip_fuzzyfiles = 1;
+$FS::cust_main::import = 1;
+$FS::cust_main::import = 1;
while (<STDIN>) {
next;
}
- if ( $opt_p ) {
- $cust_main->payby($opt_p);
+ my %cust_tag = ( custnum=>$custnum, tagnum=>$opt_t );
+ if ( $opt_t && ! qsearchs('cust_tag', \%cust_tag) ) {
+ my $cust_tag = new FS::cust_tag \%cust_tag;
+ my $error = $cust_tag->insert;
+ die "$error\n" if $error;
}
- my $error = $cust_main->replace;
- die "$error\n" if $error;
+ if ( $opt_p || $opt_a ) {
+ $cust_main->agentnum($opt_a) if $opt_a;
+ $cust_main->payby($opt_p) if $opt_p;
+
+ my $error = $cust_main->replace;
+ die "$error\n" if $error;
+ }
+
+ if ( $opt_k ) {
+ foreach my $k (split(/\s*,\s*/, $opt_k)) {
+ my($old, $new) = split(/\s*:\s*/, $k);
+ foreach my $cust_pkg ( qsearch('cust_pkg', {
+ 'custnum' => $cust_main->custnum,
+ 'pkgpart' => $old,
+ })
+ )
+ {
+ $cust_pkg->pkgpart($new);
+ my $error = $cust_pkg->replace;
+ die "$error\n" if $error;
+ }
+ }
+ }
+
+ if ( $opt_c ) {
+ my @error = $cust_main->cancel( 'reason' => $opt_c );
+ die join(' / ', @error). "\n" if @error;
+ }
}
sub usage {
- die "usage: cust_main-bulk_change -p NEW_PAYBY employee_username <custnums.txt\n";
+ die "usage: cust_main-bulk_change [ -a agentnum ] [ -p NEW_PAYBY ] [ -t tagnum ] [ -k old_pkgpart:new_pkgpart,... ] employee_username <custnums.txt\n";
}
=head1 NAME
=head1 SYNOPSIS
- cust_main-bulk_change -p NEW_PAYBY username <custnums.txt
+ cust_main-bulk_change [ -a agentnum ] [ -p NEW_PAYBY ] [ -t tagnum ] [ -k old_pkgpart:new_pkgpart,... ] [ -c reasonnum ] username <custnums.txt
=head1 DESCRIPTION
-Command-line tool to change the payby field for a group of customers.
+Command-line tool to make bulk changes to a group of customers.
+
+-a: new agentnum
+
+-p: new payby, for example, I<CARD> or I<DCRD>
+
+-t: tagnum to add if not present
+
+-k: old_pkgpart:new_pkgpart, for example, I<5:4>. Multiple entries can be comma-separated.
--p: new payby, for example, I<CARD> or I<DCRD>.
+-c: Cancel customer
user: Employee username