--- /dev/null
+#!/usr/bin/perl
+
+use strict;
+use Text::CSV_XS;
+use FS::UID qw(adminsuidsetup);
+use FS::Record qw(qsearch);
+use FS::cust_bill;
+use Date::Format;
+
+my @fields = qw(
+ invnum
+ custnum
+);
+
+push @fields,
+ { 'header' => 'Date',
+ 'callback' => sub { time2str('%x', shift->_date); },
+ },
+;
+
+push @fields, qw( charged owed );
+
+my $user = shift or die &usage;
+adminsuidsetup $user;
+
+my $agentnum = shift or die &usage;
+
+my $csv = new Text::CSV_XS;
+
+$csv->combine( map { ref($_) ? $_->{'header'} : $_ } @fields ) or die;
+print $csv->string."\n";
+
+my @cust_bill = qsearch({
+ 'table' => 'cust_bill',
+ 'addl_from' => 'LEFT JOIN cust_main USING ( custnum )',
+ 'hashref' => {},
+ 'extra_sql' => "WHERE cust_main.agentnum = $agentnum",
+});
+
+foreach my $cust_bill ( @cust_bill ) {
+ $csv->combine( map { ref($_) ? &{$_->{'callback'}}($cust_bill)
+ : $cust_bill->$_()
+ }
+ @fields
+ ) or die;
+ print $csv->string."\n";
+}
+
+1;
--- /dev/null
+#!/usr/bin/perl
+
+use strict;
+use Text::CSV_XS;
+use FS::UID qw(adminsuidsetup);
+use FS::Record qw(qsearch);
+use FS::cust_main;
+
+my @fields = qw(
+ custnum
+ status
+ last
+ first
+ company
+ address1
+ address2
+ city
+ county
+ state
+ zip
+ country
+ daytime
+ night
+ mobile
+ fax
+ ship_address1
+ ship_address2
+ ship_city
+ ship_county
+ ship_state
+ ship_zip
+ ship_country
+ ship_daytime
+ ship_night
+ ship_mobile
+ ship_fax
+ invoicing_list_emailonly_scalar
+ payby
+ balance
+);
+
+push @fields,
+ #Billing Type: Credit Card
+ { 'header' => 'Credit Card number',
+ 'callback' => sub { my $c_m = shift;
+ $c_m->payby =~ /^(CARD|DCRD)$/ ? $c_m->payinfo : '' ;
+ },
+ },
+ { 'header' => 'Expiration on card',
+ 'callback' => sub { my $c_m = shift;
+ return '' unless $c_m->payby =~ /^(CARD|DCRD)$/;
+ $c_m->paydate =~ /^(\d{4})-(\d{2})-\d{2}$/ or die;
+ return "$2/$1";
+ },
+ },
+ { 'header' => 'Name on card',
+ 'callback' => sub { my $c_m = shift;
+ $c_m->payby =~ /^(CARD|DCRD)$/ ? $c_m->paydname : '' ;
+ },
+ },
+
+ #Billing Type: Electronic check
+ { 'header' => 'ABA/Routing number',
+ 'callback' => sub { my $c_m = shift;
+ return '' unless $c_m->payby =~ /^(CHEK|DCHK)$/;
+ (split('@', $c_m->payinfo))[1];
+ },
+ },
+ { 'header' => 'Account number',
+ 'callback' => sub { my $c_m = shift;
+ return '' unless $c_m->payby =~ /^(CHEK|DCHK)$/;
+ (split('@', $c_m->payinfo))[0];
+ },
+ },
+ { 'header' => 'Account type',
+ 'callback' => sub { my $c_m = shift;
+ $c_m->payby =~ /^(CHEK|DCHK)$/ ? $c_m->paytype : '';
+ },
+ },
+ { 'header' => 'Bank Name',
+ 'callback' => sub { my $c_m = shift;
+ $c_m->payby =~ /^(CHEK|DCHK)$/ ? $c_m->payname : '';
+ },
+ },
+
+;
+
+my $user = shift or die &usage;
+adminsuidsetup $user;
+
+my $agentnum = shift or die &usage;
+
+my $csv = new Text::CSV_XS;
+
+$csv->combine( map { ref($_) ? $_->{'header'} : $_ } @fields ) or die;
+print $csv->string."\n";
+
+my @cust_main = qsearch('cust_main', { 'agentnum'=>$agentnum });
+
+foreach my $cust_main( @cust_main ) {
+ $csv->combine( map { ref($_) ? &{$_->{'callback'}}($cust_main)
+ : $cust_main->$_()
+ }
+ @fields
+ ) or die;
+ print $csv->string."\n";
+}
+
+1;
--- /dev/null
+#!/usr/bin/perl
+
+use strict;
+use Text::CSV_XS;
+use FS::UID qw(adminsuidsetup);
+use FS::Record qw(qsearch);
+use FS::cust_pkg;
+use Date::Format;
+
+my @fields = qw(
+ pkgnum
+ custnum
+ status
+ pkgpart
+);
+
+push @fields,
+ { 'header' => 'Package',
+ 'callback' => sub { shift->part_pkg->pkg_comment('nopkgpart'=>1) },
+ },
+ map {
+ my $field = $_;
+ { 'header' => $field,
+ 'callback' => sub { my $d = shift->get($field) or return '';
+ time2str('%x', $d); # %X", $d);
+ },
+ };
+ } qw( order_date start_date setup last_bill bill
+ adjourn susp resume
+ expire cancel uncancel
+ contract_end
+ )
+;
+
+my $user = shift or die &usage;
+adminsuidsetup $user;
+
+my $agentnum = shift or die &usage;
+
+my $csv = new Text::CSV_XS;
+
+$csv->combine( map { ref($_) ? $_->{'header'} : $_ } @fields ) or die;
+print $csv->string."\n";
+
+my @cust_pkg = qsearch({
+ 'table' => 'cust_pkg',
+ 'addl_from' => 'LEFT JOIN cust_main USING ( custnum )',
+ 'hashref' => {},
+ 'extra_sql' => "WHERE cust_main.agentnum = $agentnum",
+});
+
+foreach my $cust_pkg ( @cust_pkg ) {
+ $csv->combine( map { ref($_) ? &{$_->{'callback'}}($cust_pkg)
+ : $cust_pkg->$_()
+ }
+ @fields
+ ) or die;
+ print $csv->string."\n";
+}
+
+1;
--- /dev/null
+#!/usr/bin/perl
+
+use strict;
+use Text::CSV_XS;
+use FS::UID qw(adminsuidsetup);
+use FS::Record qw(qsearch);
+use FS::svc_acct;
+
+my @fields = (
+ { 'header' => 'pkgnum',
+ 'callback' => sub { shift->cust_svc->pkgnum; },
+ },
+ { 'header' => 'svcpart',
+ 'callback' => sub { shift->cust_svc->svcpart; },
+ },
+ { 'header' => 'Service',
+ 'callback' => sub { shift->cust_svc->part_svc->svc; },
+ },
+ qw(
+ username
+ _password
+ slipip
+ )
+);
+
+my $user = shift or die &usage;
+adminsuidsetup $user;
+
+my $agentnum = shift or die &usage;
+
+my $csv = new Text::CSV_XS;
+
+$csv->combine( map { ref($_) ? $_->{'header'} : $_ } @fields ) or die;
+print $csv->string."\n";
+
+my @svc_acct = qsearch({
+ 'table' => 'svc_acct',
+ 'addl_from' => 'LEFT JOIN cust_svc USING (svcnum)
+ LEFT JOIN cust_pkg USING (pkgnum)
+ LEFT JOIN cust_main USING ( custnum )',
+ 'hashref' => {},
+ 'extra_sql' => "WHERE cust_main.agentnum = $agentnum",
+});
+
+foreach my $svc_acct ( @svc_acct ) {
+ $csv->combine( map { ref($_) ? &{$_->{'callback'}}($svc_acct)
+ : $svc_acct->$_()
+ }
+ @fields
+ ) or die;
+ print $csv->string."\n";
+}
+
+1;
--- /dev/null
+#!/usr/bin/perl
+
+use strict;
+use Text::CSV_XS;
+use FS::UID qw(adminsuidsetup);
+use FS::Record qw(qsearch);
+use FS::svc_broadband;
+
+my @fields = (
+ { 'header' => 'pkgnum',
+ 'callback' => sub { shift->cust_svc->pkgnum; },
+ },
+ { 'header' => 'svcpart',
+ 'callback' => sub { shift->cust_svc->svcpart; },
+ },
+ { 'header' => 'Service',
+ 'callback' => sub { shift->cust_svc->part_svc->svc; },
+ },
+ qw(
+ description
+ speed_up
+ speed_down
+ ip_addr
+ mac_addr
+ latitude
+ longitude
+ )
+);
+
+my $user = shift or die &usage;
+adminsuidsetup $user;
+
+my $agentnum = shift or die &usage;
+
+my $csv = new Text::CSV_XS;
+
+$csv->combine( map { ref($_) ? $_->{'header'} : $_ } @fields ) or die;
+print $csv->string."\n";
+
+my @svc_broadband = qsearch({
+ 'select' => 'svc_broadband.*',
+ 'table' => 'svc_broadband',
+ 'addl_from' => 'LEFT JOIN cust_svc USING (svcnum)
+ LEFT JOIN cust_pkg USING (pkgnum)
+ LEFT JOIN cust_main USING ( custnum )',
+ 'hashref' => {},
+ 'extra_sql' => "WHERE cust_main.agentnum = $agentnum",
+});
+
+foreach my $svc_broadband ( @svc_broadband ) {
+ $csv->combine( map { ref($_) ? &{$_->{'callback'}}($svc_broadband)
+ : $svc_broadband->$_()
+ }
+ @fields
+ ) or die;
+ print $csv->string."\n";
+}
+
+1;
--- /dev/null
+#!/usr/bin/perl
+
+use strict;
+use Text::CSV_XS;
+use FS::UID qw(adminsuidsetup);
+use FS::Record qw(qsearch);
+use FS::svc_phone;
+
+my @fields = (
+ { 'header' => 'pkgnum',
+ 'callback' => sub { shift->cust_svc->pkgnum; },
+ },
+ { 'header' => 'svcpart',
+ 'callback' => sub { shift->cust_svc->svcpart; },
+ },
+ { 'header' => 'Service',
+ 'callback' => sub { shift->cust_svc->part_svc->svc; },
+ },
+ qw(
+ phonenum
+ pin
+ sip_password
+ phone_name
+ )
+);
+
+my $user = shift or die &usage;
+adminsuidsetup $user;
+
+my $agentnum = shift or die &usage;
+
+my $csv = new Text::CSV_XS;
+
+$csv->combine( map { ref($_) ? $_->{'header'} : $_ } @fields ) or die;
+print $csv->string."\n";
+
+my @svc_phone = qsearch({
+ 'table' => 'svc_phone',
+ 'addl_from' => 'LEFT JOIN cust_svc USING (svcnum)
+ LEFT JOIN cust_pkg USING (pkgnum)
+ LEFT JOIN cust_main USING ( custnum )',
+ 'hashref' => {},
+ 'extra_sql' => "WHERE cust_main.agentnum = $agentnum",
+});
+
+foreach my $svc_phone ( @svc_phone ) {
+ $csv->combine( map { ref($_) ? &{$_->{'callback'}}($svc_phone)
+ : $svc_phone->$_()
+ }
+ @fields
+ ) or die;
+ print $csv->string."\n";
+}
+
+1;