show total number of payments
[freeside.git] / bin / cdr-transnexus.import
1 #!/usr/bin/perl
2
3 use strict;
4 use Getopt::Std;
5 use Net::SFTP::Foreign;
6 use FS::UID qw(adminsuidsetup datasrc);
7 use FS::cdr;
8
9 ###
10 # parse command line
11 ###
12
13 use vars qw( $opt_p $opt_d $opt_v );
14 getopts('v');
15
16 $opt_p = 'last';
17 $opt_d = 'done';
18
19 my $user = shift or die &usage;
20 adminsuidsetup $user;
21
22 # %%%FREESIDE_CACHE%%%
23 my $cachedir = '/usr/local/etc/freeside/cache.'. datasrc. '/cdrs';
24 mkdir $cachedir unless -d $cachedir;
25
26 #my $format = shift or die &usage;
27 my $format = 'transnexus';
28
29 use vars qw( $servername );
30 $servername = shift or die &usage;
31
32 my $DIR = '/home/ossadmin/OSS/nexoss/CDR_ARCHIVE_BY_ACCOUNT';
33
34 ###
35 # get the file list
36 ###
37
38 warn "Retreiving directory listing\n" if $opt_v;
39
40 my $ls_sftp = sftp();
41
42 my $lsdir = $ls_sftp->ls($DIR);
43
44 ###
45 # import each file in each dir
46 ###
47
48 foreach my $dir ( @$lsdir ) {
49
50   my $dirname = $dir->{filename};
51   warn "Scanning dir $dirname\n" if $opt_v;
52
53   my $ls = $ls_sftp->ls("$DIR/$dirname", wanted => qr/^$opt_p.*-CDRs$/i );
54
55   foreach my $file ( @$ls ) {
56
57     my $filename = $file->{filename};
58     warn "Downloading $filename\n" if $opt_v;
59
60     #get the file
61     my $get_sftp = sftp();
62     $get_sftp->get("$DIR/$dirname/$filename", "$cachedir/$filename")
63       or die "Can't get $filename: ". $get_sftp->error;
64
65     warn "Processing $filename\n" if $opt_v;
66
67     my $error = FS::cdr::batch_import( {
68       'file'     => "$cachedir/$filename",
69       'format'   => $format,
70       'params'   => { 'cdrbatch' => $filename, },
71       'empty_ok' => 1,
72     } );
73     die $error if $error;
74
75     if ( $opt_d ) {
76       my $mv_sftp = sftp();
77       $mv_sftp->mkdir("$DIR/$dirname/$opt_d");
78       $mv_sftp->rename( "$DIR/$dirname/$filename",
79                         "$DIR/$dirname/$opt_d/$filename" )
80         or die "can't move $filename to $opt_d: ". $mv_sftp->error;
81     }
82
83     unlink "$cachedir/$filename";
84
85   }
86
87 }
88
89 ###
90 # subs
91 ###
92
93 sub usage {
94   "Usage: \n  cdr-transnexus.import [ -v ] user [sftpuser@]servername\n";
95 }
96
97 use vars qw( $sftp );
98
99 sub sftp {
100
101   #reuse connections
102   return $sftp if $sftp && $sftp->cwd;
103
104   my %sftp = ( host => $servername );
105
106   $sftp = Net::SFTP::Foreign->new(%sftp);
107   $sftp->error and die "SFTP connection failed: ". $sftp->error;
108
109   $sftp;
110 }
111
112 =head1 NAME
113
114 cdr.sftp_and_import - Download CDR files from a remote server via SFTP
115
116 =head1 SYNOPSIS
117
118   cdr-transnexus.import [ -v ] user [sftpuser@]servername
119
120 =head1 DESCRIPTION
121
122 Command line tool to download CDR files from a remote server via SFTP and then
123 import them into the database.
124
125 -v: verbose
126
127 user: freeside username
128
129 [sftpuser@]servername: remote server
130
131 =head1 BUGS
132
133 Hacked up copy of freeside-cdr-sftp_and_import
134
135 =head1 SEE ALSO
136
137 L<FS::cdr>
138
139 =cut
140
141 1;
142