add customer fields option with agent, display_custnum, status and name, RT#73721
[freeside.git] / bin / cust_pkg.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_pkg;
8 use Date::Format;
9
10 my @fields = qw(
11   pkgnum
12   custnum
13   status
14   pkgpart
15 );
16
17 push @fields,
18   { 'header'   => 'Package',
19     'callback' => sub { shift->part_pkg->pkg_comment('nopkgpart'=>1) },
20   },
21   map { 
22     my $field = $_;
23     { 'header'   => $field,
24       'callback' => sub { my $d = shift->get($field) or return '';
25                           time2str('%x', $d); # %X", $d);
26                         },
27     };
28   } qw( order_date start_date setup last_bill bill
29         adjourn susp resume
30         expire cancel uncancel
31         contract_end
32   )
33 ;
34
35 my $user = shift or die &usage;
36 adminsuidsetup $user;
37
38 my $agentnum = shift or die &usage;
39
40 my $csv = new Text::CSV_XS;
41
42 $csv->combine( map { ref($_) ? $_->{'header'} : $_ } @fields ) or die;
43 print $csv->string."\n";
44
45 my @cust_pkg = qsearch({
46   'table'     => 'cust_pkg',
47   'addl_from' => 'LEFT JOIN cust_main USING ( custnum )',
48   'hashref'   => {},
49   'extra_sql' => "WHERE cust_main.agentnum = $agentnum",
50 });
51
52 foreach my $cust_pkg ( @cust_pkg ) {
53   $csv->combine( map { ref($_) ? &{$_->{'callback'}}($cust_pkg)
54                                : $cust_pkg->$_()
55                      } 
56                    @fields
57                ) or die;
58   print $csv->string."\n";
59 }
60
61 1;