Merge branch 'github/pr/55_reprise'
[freeside.git] / bin / cust_main.export
1 #!/usr/bin/perl
2
3 use strict;
4 use Text::CSV_XS;
5 use FS::UID qw(adminsuidsetup);
6 use FS::Record qw(qsearch);
7 use FS::cust_main;
8
9 my @fields = qw(
10   custnum
11   status
12   last
13   first
14   company
15   address1
16   address2
17   city
18   county
19   state
20   zip
21   country
22   daytime
23   night
24   mobile
25   fax
26   ship_address1
27   ship_address2
28   ship_city
29   ship_county
30   ship_state
31   ship_zip
32   ship_country
33   ship_daytime
34   ship_night
35   ship_mobile
36   ship_fax
37   invoicing_list_emailonly_scalar
38   payby
39   balance
40 );
41
42 push @fields,
43   #Billing Type: Credit Card
44   { 'header'   => 'Credit Card number',
45     'callback' => sub { my $c_m = shift;
46                         $c_m->payby =~ /^(CARD|DCRD)$/ ? $c_m->payinfo : '' ;
47                       },
48   },
49   { 'header'   => 'Expiration on card',
50     'callback' => sub { my $c_m = shift;
51                         return '' unless $c_m->payby =~ /^(CARD|DCRD)$/;
52                         $c_m->paydate =~ /^(\d{4})-(\d{2})-\d{2}$/ or die;
53                         return "$2/$1";
54                       },
55   },
56   { 'header'   => 'Name on card',
57     'callback' => sub { my $c_m = shift;
58                         $c_m->payby =~ /^(CARD|DCRD)$/ ? $c_m->paydname : '' ;
59                       },
60   },
61
62   #Billing Type: Electronic check
63   { 'header'   => 'ABA/Routing number',
64     'callback' => sub { my $c_m = shift;
65                         return '' unless $c_m->payby =~ /^(CHEK|DCHK)$/;
66                         (split('@', $c_m->payinfo))[1];
67                       },
68   },
69   { 'header'   => 'Account number',
70     'callback' => sub { my $c_m = shift;
71                         return '' unless $c_m->payby =~ /^(CHEK|DCHK)$/;
72                         (split('@', $c_m->payinfo))[0];
73                       },
74   },
75   { 'header'   => 'Account type',
76     'callback' => sub { my $c_m = shift;
77                         $c_m->payby =~ /^(CHEK|DCHK)$/ ? $c_m->paytype : '';
78                       },
79   },
80   { 'header'   => 'Bank Name',
81     'callback' => sub { my $c_m = shift;
82                         $c_m->payby =~ /^(CHEK|DCHK)$/ ? $c_m->payname : '';
83                       },
84   },
85
86 ;
87
88 my $user = shift or die &usage;
89 adminsuidsetup $user;
90
91 my $agentnum = shift or die &usage;
92
93 my $csv = new Text::CSV_XS;
94
95 $csv->combine( map { ref($_) ? $_->{'header'} : $_ } @fields ) or die;
96 print $csv->string."\n";
97
98 my @cust_main = qsearch('cust_main', { 'agentnum'=>$agentnum });
99
100 foreach my $cust_main( @cust_main ) {
101   $csv->combine( map { ref($_) ? &{$_->{'callback'}}($cust_main)
102                                : $cust_main->$_()
103                      } 
104                    @fields
105                ) or die;
106   print $csv->string."\n";
107 }
108
109 1;