use Text::CSV;
my %opt;
-getopts('vqa:P:C:e:', \%opt);
+getopts('vqNa:P:C:e:', \%opt);
# Product codes that are subject to flat rate E911 charges. For these
# products, the'quantity' field represents the number of lines.
freeside-ipifony-download
[ -v ]
[ -q ]
+ [ -N ]
[ -a archivedir ]
[ -P port ]
[ -C category ]
}
# for now assume SFTP download as the only method
-print STDERR "Connecting to $sftpuser\@$host...\n" if $opt{v};
-
-my $sftp = Net::SFTP::Foreign->new(
- host => $host,
- user => $sftpuser,
- port => $port,
- # for now we don't support passwords. use authorized_keys.
- timeout => 30,
- #more => ($opt{v} ? '-v' : ''),
-);
+my $sftp = sftp_connect($host, $sftpuser, $port);
die "failed to connect to '$sftpuser\@$host'\n(".$sftp->error.")\n"
if $sftp->error;
if ( $next_bill_date ) {
my ($bill_month, $bill_year) = (localtime($next_bill_date))[4, 5];
my ($this_month, $this_year) = (localtime(time))[4, 5];
- if ( $this_month == $bill_month and $this_year == $bill_year ) {
+ if ( $opt{N} or
+ $this_month == $bill_month and $this_year == $bill_year ) {
$cust_main->set('charge_date', $next_bill_date);
}
}
";
}
+sub sftp_connect {
+ my ($host, $sftpuser, $port) = @_;
+ my $sftp;
+ my $connection_tries = 1;
+
+ while (1) {
+ print STDERR "Connecting to $sftpuser\@$host try number $connection_tries...\n" if $opt{v};
+ $sftp = Net::SFTP::Foreign->new(
+ host => $host,
+ user => $sftpuser,
+ port => $port,
+ # for now we don't support passwords. use authorized_keys.
+ timeout => 30,
+ #more => ($opt{v} ? '-v' : ''),
+ );
+
+ if ($sftp->error && $connection_tries < 1200) {
+ $connection_tries++;
+ print STDERR "Connection failed to $sftpuser\@$host trying again in 60 sec...\n" if $opt{v};
+ sleep 60;
+ }
+ else { last; }
+ }
+
+ return $sftp
+}
+
=head1 NAME
freeside-ipifony-download - Download and import invoice items from IPifony.
freeside-ipifony-download
[ -v ]
[ -q ]
+ [ -N ]
[ -a archivedir ]
[ -P port ]
[ -C category ]
I<hostname>: the SFTP server.
+I<path>: the path on the server to the working directory. The working
+directory is the one containing the "ready/" and "done/" subdirectories.
+
=head1 OPTIONAL PARAMETERS
-v: Be verbose.
-q: Include the quantity and unit price in the charge description.
+-N: Always bill the charges on the customer's next bill date, if they have
+one. Otherwise, charges will be billed on the next bill date only if it's
+within the current calendar month.
+
-a I<archivedir>: Save a copy of the downloaded file to I<archivedir>.
-P I<port>: Connect to that TCP port.