Ticket #31847 CIBC batch format
authorJeremy Davis <jeremyd@freeside.biz>
Thu, 13 Nov 2014 21:58:55 +0000 (16:58 -0500)
committerJeremy Davis <jeremyd@freeside.biz>
Thu, 13 Nov 2014 21:58:55 +0000 (16:58 -0500)
FS/FS/Conf.pm
FS/FS/pay_batch/CIBC.pm [new file with mode: 0644]
httemplate/search/elements/cust_pay_batch_top.html

index 77267cf..b1ef901 100644 (file)
@@ -3729,7 +3729,7 @@ and customer address. Include units.',
     'type'        => 'select',
     'select_enum' => [ 'NACHA', 'csv-td_canada_trust-merchant_pc_batch',
                        'csv-chase_canada-E-xactBatch', 'BoM', 'PAP',
-                       'paymentech', 'ach-spiritone', 'RBC'
+                       'paymentech', 'ach-spiritone', 'RBC', 'CIBC',
                     ]
   },
 
@@ -3791,7 +3791,7 @@ and customer address. Include units.',
     'type'        => 'select',
     'select_enum' => [ 'NACHA', 'csv-td_canada_trust-merchant_pc_batch', 'BoM',
                        'PAP', 'paymentech', 'ach-spiritone', 'RBC',
-                       'td_eft1464', 'eft_canada'
+                       'td_eft1464', 'eft_canada', 'CIBC'
                      ]
   },
 
@@ -3809,6 +3809,13 @@ and customer address. Include units.',
     'type'        => 'textarea',
   },
 
+{
+    'key'         => 'batchconfig-CIBC',
+    'section'     => 'billing',
+    'description' => 'Configuration for Canadian Imperial Bank of Commerce, six lines: 1. Origin ID, 2. Datacenter, 3. Typecode, 4. Short name, 5. Bank, 6. Bank account',
+    'type'        => 'textarea',
+  },
+
   {
     'key'         => 'batchconfig-PAP',
     'section'     => 'billing',
diff --git a/FS/FS/pay_batch/CIBC.pm b/FS/FS/pay_batch/CIBC.pm
new file mode 100644 (file)
index 0000000..2c72bef
--- /dev/null
@@ -0,0 +1,87 @@
+package FS::pay_batch::CIBC;
+
+use strict;
+use vars qw(@ISA %import_info %export_info $name);
+use Date::Format 'time2str';
+use FS::Conf;
+
+my $conf;
+my ($origid, $datacenter, $transcode, $shortname, $mybank, $myacct);
+
+$name = 'CIBC';
+
+%import_info = (
+  'filetype'    => 'CSV',
+  'fields'      => [],
+  'hook'        => sub { die "Can't import CIBC" },
+  'approved'    => sub { 1 },
+  'declined'    => sub { 0 },
+);
+
+%export_info = (
+  init => sub {
+    $conf = shift;
+    ($origid,
+     $datacenter,
+     $transcode, 
+     $shortname, 
+     $mybank, 
+     $myacct) = $conf->config("batchconfig-CIBC");
+  },
+  header => sub { 
+    my $pay_batch = shift;
+    sprintf( "1%2s%05u%-5s%010u%6s%04u%1s%04u%5u%-12u%2s%-15s%1s%3s%4s \n",  #80
+      '',
+      substr(0,5, $origid),
+      '',
+      $origid,
+      time2str('%y%m%d', $pay_batch->download),
+      $pay_batch->batchnum,
+      ' ',
+      '0010',
+      $mybank,
+      $myacct,
+      '',
+      $shortname,
+      ' ',
+      'CAD',
+      '', ) .
+    sprintf( "5%46s%03u%-10s%6s%14s", #80
+      '',
+      $transcode,
+      '           ',
+      time2str('%y%m%d', $pay_batch->download),
+      '               ');
+  },
+  row => sub {
+    my ($cust_pay_batch, $pay_batch) = @_;
+    my ($account, $aba) = split('@', $cust_pay_batch->payinfo);
+    my($bankno, $branch);
+    if ( $aba =~ /^0(\d{3})(\d{5})$/ ) { # standard format for Canadian bank ID
+      ($bankno, $branch) = ( $1, $2 );
+    } elsif ( $aba =~ /^(\d{5})\.(\d{3})$/ ) { #how we store branches
+      ($branch, $bankno) = ( $1, $2 );
+    } else {
+      die "invalid branch/routing number '$aba'\n";
+    }
+    sprintf( "6%1s%1s%04u%05u%-12u%5u%10s%-13s%-22s%6s ", #80
+      'D',
+      '',
+      $bankno,
+      $branch,
+      $account,
+      '',
+      $cust_pay_batch->amount * 100,
+      $cust_pay_batch->paybatchnum,
+      $cust_pay_batch->payname,
+      '     ',
+      );
+  },
+  footer => sub {
+    my ($pay_batch, $batchcount, $batchtotal) = @_;
+    sprintf( "7%03u%06f%010s%20s%012s%28s \n", $transcode, $batchcount,'0','',$batchtotal*100,''). #80
+    sprintf( "9%06s%06s%67s", 1, $batchcount,''); #80
+  },
+);
+
+1;
index a773dd0..2dbf620 100644 (file)
@@ -149,6 +149,7 @@ tie my %download_formats, 'Tie::IxHash', (
   'RBC' => 'Royal Bank of Canada PDS batch',
   'td_eft1464' => '1464 byte file for TD Commercial Banking EFT',
   'eft_canada' => 'EFT Canada CSV batch',
+  'CIBC'       => '80 byte file for Canadian Imperial Bank of Commerce',
 # insert new batch formats here
 );