fix 'Can't call method svcdb without a package or object reference' when ordering...
[freeside.git] / FS / FS / Cron / upload.pm
index fea3d2c..877b07f 100644 (file)
@@ -13,6 +13,7 @@ use LWP::UserAgent;
 use HTTP::Request;
 use HTTP::Request::Common;
 use HTTP::Response;
+use Net::FTP;
 
 @ISA = qw( Exporter );
 @EXPORT_OK = qw ( upload );
@@ -96,8 +97,8 @@ sub billco_upload {
     or die "no username for agent $agentnum\n";
   my $password = $conf->config( 'billco-password', $agentnum, 1 )
     or die "no password for agent $agentnum\n";
-  my $clicode  = $conf->config( 'billco-clicode', $agentnum )
-    or die "no clicode for agent $agentnum\n";
+  my $clicode  = $conf->config( 'billco-clicode', $agentnum, 1 );
+    #or die "no clicode for agent $agentnum\n";
 
   die "no date provided\n" unless $opt{date};
   my $zipfile  = "$dir/agentnum$agentnum-$opt{date}.zip";
@@ -153,20 +154,46 @@ sub billco_upload {
   unlink "agentnum$agentnum-$opt{date}-header.csv",
          "agentnum$agentnum-$opt{date}-detail.csv";
 
-  my $ua = new LWP::UserAgent;
-  my $res = $ua->request( POST( $url,
-                                'Content_Type' => 'form-data',
-                                'Content' => [ 'username' => $username,
-                                               'pass'     => $password,
-                                               'custid'   => $username,
-                                               'clicode'  => $clicode,
-                                               'file1'    => [ $zipfile ],
-                                             ],
-                              )
-                        );
-
-  die "upload failed: ". $res->status_line. "\n"
-    unless $res->is_success;
+  if ( $url =~ /^http/i ) {
+
+    my $ua = new LWP::UserAgent;
+    my $res = $ua->request( POST( $url,
+                                  'Content_Type' => 'form-data',
+                                  'Content' => [ 'username' => $username,
+                                                 'pass'     => $password,
+                                                 'custid'   => $username,
+                                                 'clicode'  => $clicode,
+                                                 'file1'    => [ $zipfile ],
+                                               ],
+                                )
+                          );
+
+    die "upload failed: ". $res->status_line. "\n"
+      unless $res->is_success;
+
+  } elsif ( $url =~ /^ftp:\/\/([\w\.]+)(\/.*)$/i ) {
+
+    my($hostname, $path) = ($1, $2);
+
+    my $ftp = new Net::FTP($hostname)
+      or die "can't connect to $hostname: $@\n";
+    $ftp->login($username, $password)
+      or die "can't login to $hostname: ". $ftp->message."\n";
+    unless ( $ftp->cwd($path) ) {
+      my $msg = "can't cd $path on $hostname: ". $ftp->message. "\n";
+      ( $path eq '/' ) ? warn $msg : die $msg;
+    }
+    $ftp->binary
+      or die "can't set binary mode on $hostname\n";
+
+    $ftp->put($zipfile)
+      or die "can't put $zipfile: ". $ftp->message. "\n";
+
+    $ftp->quit;
+
+  } else {
+    die "unknown scheme in URL $url\n";
+  }
 
   $dbh->commit or die $dbh->errstr if $oldAutoCommit;
   '';