+sub get_returns {
+# Required parameters:
+# ftp_user, ftp_pass, ftp_host, ftp_path
+# Optional:
+# start, end
+ eval('use Date::Parse q!str2time!; use Net::FTP; use File::Temp q!tempdir!');
+ die $@ if $@;
+
+ my $self = shift;
+# $self->required_fields, for processor options
+ my @missing;
+ my ($user, $pass, $host, $path) = map {
+ if($self->can($_) and $self->$_) {
+ $self->$_ ;
+ } else {
+ push @missing, $_; '';
+ }
+ } qw(ftp_user ftp_pass ftp_host);
+ die "missing gateway option(s): ".join(', ',@missing)."\n" if @missing;
+ my $ftp_path = $self->ftp_path if $self->can('ftp_path');
+
+ my $start = $self->{_content}->{start};
+ $start &&= str2time($start);
+ $start ||= time - 86400;
+ $start = time2str('%Y%m%d',$start);
+
+ my $end = $self->{_content}->{end};
+ $end &&= str2time($end);
+ $end ||= time;
+ $end = time2str('%Y%m%d',$end);
+
+ my $ftp = Net::FTP->new($host)
+ or die "FTP connection to '$host' failed.\n";
+ $ftp->login($user, $pass) or die "FTP login failed: ".$ftp->message."\n";
+ $ftp->cwd($path) or die "can't chdir to $path\n" if $path;
+
+ my $tmp = tempdir(CLEANUP => 1);
+ my @files;
+ foreach my $filename ($ftp->ls) {
+ if($filename =~ /^\w+_RET(\d{8}).csv$/
+ and $1 >= $start
+ and $1 <= $end ) {
+ $ftp->get($filename, "$tmp/$1") or die "Failed to download $filename: ".$ftp->message."\n";
+ push @files, $1;
+ }
+ }
+ $ftp->close;
+
+ my @tids;
+ foreach my $filename (@files) {
+ open IN, '<', "$tmp/$filename";
+ my @fields = split ',',<IN>; #fetch header row
+ my ($i) = grep { $fields[$_] eq 'AccountToID' } 0..(scalar @fields - 1);
+ $i ||= 1;
+ while(<IN>) {
+ my @fields = split ',', $_;
+ push @tids, $fields[$i];
+ }
+ close IN;
+ }
+ return @tids;
+}
+