1 package FS::pay_batch::td_eft1464;
4 use vars qw(@ISA %import_info %export_info $name);
5 use Date::Format 'time2str';
7 use FS::Record qw(qsearch);
11 td_eft1464 - TD Commercial Banking EFT1464 format
15 The Freeside option 'batchconfig-td_eft1464' must be set
16 with the following values on separate lines:
22 =item TD Datacenter Location
35 =item Returned Payment Branch (5 digits)
37 =item Returned Payment Account
39 =item Transaction Type Code - defaults to "437" (Internet access)
50 # TD Bank EFT 1464 Byte format
52 %import_info = ( filetype => 'NONE' );
53 # just to suppress warning; importing this format is a fatal error
67 } = $conf->config("batchconfig-td_eft1464");
68 $opt{'origid'} = sprintf('%-10.10s', $opt{'origid'});
69 $opt{'shortname'} = sprintf('%-15.15s', $opt{'shortname'});
70 $opt{'longname'} = sprintf('%-30.30s', $opt{'longname'});
71 $opt{'retbranch'} = '0004'.sprintf('%5.5s',$opt{'retbranch'});
72 $opt{'retacct'} = sprintf('%-11.11s', $opt{'retacct'}). ' ';
76 my $pay_batch = shift;
77 my @cust_pay_batch = @{(shift)};
78 my $time = $pay_batch->download || time;
79 my $now = sprintf("%03u%03u",
80 (localtime(time))[5] % 100,#year since 1900
81 (localtime(time))[7]+1);#day of year
83 # Request settlement the next day
84 my $duedate = time+86400;
85 $opt{'due'} = sprintf("%03u%03u",
86 (localtime($duedate))[5] % 100,
87 (localtime($duedate))[7]+1);
90 sprintf('%04u', ($pay_batch->batchnum % 9999)+1), # file creation number
93 sprintf('%09u', 1), #record number
102 my ($cust_pay_batch, $pay_batch) = @_;
103 my ($account, $aba) = split('@', $cust_pay_batch->payinfo);
104 if ( $aba =~ /^(\d+)\.(\d+)$/ ) { #branch.route
105 $aba = $2.$1; #routebranch
108 # The 1464 byte format supports up to 5 payments per line,
109 # but we're only going to send 1.
111 ## set to D for debit by default, then override to what cust_pay_batch has as payments may not have paycode.
112 my $debitorcredit = 'D';
113 $debitorcredit = $cust_pay_batch->paycode unless !$cust_pay_batch->paycode;
115 my $control = join('',
116 $debitorcredit, # D for 'debit' or C for Credit
117 sprintf("%09u", $i), #record number
121 my $payment = join('',
122 $opt{'cpacode'} || 437, # CPA code, defaults to "Internet access"
123 sprintf('%010.0f', $cust_pay_batch->amount*100),
124 $opt{'due'}, #due date...? XXX
125 sprintf('%09u', $aba),
126 sprintf('%-12.12s', $account),
132 $cust_pay_batch->first, $cust_pay_batch->last)
136 sprintf('%-19.19s', $cust_pay_batch->paybatchnum), # originator reference num
144 return sprintf('%-1464s',$control . $payment) ;
147 my ($pay_batch, $batchcount, $batchtotal) = @_;
150 sprintf('%09u', $batchcount + 2),
153 sprintf('%014.0f', $batchtotal*100), # total of debit txns
154 sprintf('%08u', $batchcount), # number of debit txns
155 '0' x 14, # total of credit txns
156 '0' x 8, # total of credit txns
162 sub _upgrade_gateway {
163 my $conf = FS::Conf->new;
164 my @batchconfig = $conf->config('batchconfig-td_eft1464');
166 @options{ qw(originator datacentre short_name long_name return_branch
167 return_account cpa_code) } = @batchconfig;
168 ( 'TD_EFT', %options );