summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--FS/FS/pay_batch/eft_canada.pm68
-rw-r--r--httemplate/misc/xmlhttp-pay_batch-note.html18
-rw-r--r--httemplate/search/elements/cust_pay_batch_top.html105
3 files changed, 131 insertions, 60 deletions
diff --git a/FS/FS/pay_batch/eft_canada.pm b/FS/FS/pay_batch/eft_canada.pm
index 64fd2f971..3c1d21986 100644
--- a/FS/FS/pay_batch/eft_canada.pm
+++ b/FS/FS/pay_batch/eft_canada.pm
@@ -66,23 +66,9 @@ my %holiday = (
@config = $conf->config('batchconfig-eft_canada');
}
# SFTP login, password, trans code, delay time
- my $process_delay;
- ($trans_code, $process_delay) = @config[2,3];
- $process_delay ||= 1; # days
-
- my $pt = time + ($process_delay * 86400);
- my @lt = localtime($pt);
- while ( $lt[6] == 0 #Sunday
- || $lt[6] == 6 #Saturday
- || $holiday_yearly{ $lt[4]+1 }{ $lt[3] }
- || $holiday{ $lt[5]+1900 }{ $lt[4]+1 }{ $lt[3] }
- )
- {
- $pt += 86400;
- @lt = localtime($pt);
- }
+ ($trans_code) = $config[2];
- $process_date = time2str('%D', $pt);
+ $process_date = time2str('%D', process_date($conf, $agentnum));
},
delimiter => '', # avoid blank lines for header/footer
@@ -124,4 +110,54 @@ my %holiday = (
);
+sub download_note { # is a class method
+ my $class = shift;
+ my $pay_batch = shift;
+ my $conf = FS::Conf->new;
+ my $agentnum = $pay_batch->agentnum;
+ my $tomorrow = (localtime(time))[2] >= 10;
+ my $upload_date = time;
+ $upload_date += 86400 if $tomorrow;
+ my $process_date = process_date($conf, $agentnum);
+ my $date_format = $conf->config('date_format') || '%D';
+
+ 'Upload this file before 11:00 AM '.
+ ($tomorrow ? 'tomorrow' : 'today') .
+ ' (' . time2str($date_format, $upload_date) . '). '.
+ 'Payments will be processed on '.
+ time2str($date_format, $process_date) . '.';
+}
+
+sub process_date {
+ my ($conf, $agentnum) = @_;
+ my @config;
+ if ( $conf->exists('batch-spoolagent') ) {
+ @config = $conf->config('batchconfig-eft_canada', $agentnum);
+ } else {
+ @config = $conf->config('batchconfig-eft_canada');
+ }
+
+ my $process_delay = $config[3] || 1;
+
+ if ( (localtime(time))[2] >= 10 ) {
+ # If downloading the batch after 10:00 local time, it likely won't make
+ # the cutoff for next-day turnaround, and EFT will reject it.
+ $process_delay++;
+ }
+
+ my $pt = time + ($process_delay * 86400);
+ my @lt = localtime($pt);
+ while ( $lt[6] == 0 #Sunday
+ || $lt[6] == 6 #Saturday
+ || $holiday_yearly{ $lt[4]+1 }{ $lt[3] }
+ || $holiday{ $lt[5]+1900 }{ $lt[4]+1 }{ $lt[3] }
+ )
+ {
+ $pt += 86400;
+ @lt = localtime($pt);
+ }
+
+ $pt;
+}
+
1;
diff --git a/httemplate/misc/xmlhttp-pay_batch-note.html b/httemplate/misc/xmlhttp-pay_batch-note.html
new file mode 100644
index 000000000..ef5901631
--- /dev/null
+++ b/httemplate/misc/xmlhttp-pay_batch-note.html
@@ -0,0 +1,18 @@
+<% $note %>\
+<%init>
+
+my ($batchnum, $format) = $cgi->param('arg');
+
+my $note = '';
+if ( $batchnum =~ /^(\d+)$/ ) {
+ my $pay_batch = FS::pay_batch->by_key($batchnum);
+ if ( $pay_batch and $format =~ /^(\w+)$/ ) {
+ my $class = "FS::pay_batch::$format";
+ if ( $class->can('download_note') ) {
+ # now we can actually do something
+ $note = $class->download_note($pay_batch);
+ }
+ }
+}
+
+</%init>
diff --git a/httemplate/search/elements/cust_pay_batch_top.html b/httemplate/search/elements/cust_pay_batch_top.html
index bf3047769..c502aa9a3 100644
--- a/httemplate/search/elements/cust_pay_batch_top.html
+++ b/httemplate/search/elements/cust_pay_batch_top.html
@@ -1,24 +1,42 @@
+<& /elements/xmlhttp.html,
+ 'url' => $p.'misc/xmlhttp-pay_batch-note.html',
+ 'subs' => [ 'get_note' ]
+&>
+<script type="text/javascript">
+function format_changed() {
+ var form = document.forms['download'];
+ get_note( <% $batchnum %>, form.elements['format'].value,
+ //callback
+ function(text) {
+ document.getElementById('download_note').textContent = text;
+ }
+ );
+}
+</script>
% # Download batch
% if ( $status eq 'O'
% or ( $status eq 'I' and $curuser->access_right('Reprocess batches') )
% or ( $status eq 'R' and $curuser->access_right('Redownload resolved batches') )
% ) {
-<TABLE>
-<TR><FORM ACTION="<%$p%>misc/download-batch.cgi" METHOD="POST">
-<INPUT TYPE="hidden" NAME="batchnum" VALUE="<%$batchnum%>">
+<FORM ACTION="<%$p%>misc/download-batch.cgi" NAME="download" METHOD="POST">
+ <INPUT TYPE="hidden" NAME="batchnum" VALUE="<%$batchnum%>">
% if ( $fixed ) {
-<INPUT TYPE="hidden" NAME="format" VALUE="<%$fixed%>">
+ <INPUT TYPE="hidden" NAME="format" VALUE="<%$fixed%>">
% }
% else {
-Download batch in format <SELECT NAME="format">
+ Download batch in format <SELECT NAME="format" onchange="format_changed()">
% foreach ( keys %download_formats ) {
-<OPTION VALUE="<%$_%>"><% $download_formats{$_} %></OPTION>
+ <OPTION VALUE="<%$_%>"><% $download_formats{$_} %></OPTION>
% }
-</SELECT>
-<& .select_gateway &>
+ </SELECT>
+ <BR>
+ <DIV STYLE="color:#ff0000" ID="download_note"></DIV>
+ <& .select_gateway &>
% }
-<INPUT TYPE="submit" VALUE="Download"></FORM><BR><BR></TR>
+ <INPUT TYPE="submit" VALUE="Download">
% } # end of download
+</FORM>
+<BR>
% # Upload batch
% if ( $pay_batch->status eq 'I'
@@ -27,44 +45,42 @@ Download batch in format <SELECT NAME="format">
% and $conf->exists('batch-manual_approval')
% )
% ) {
-<TR>
-<% include('/elements/form-file_upload.html',
+<& /elements/form-file_upload.html,
'name' => 'FileUpload',
'action' => "${p}misc/upload-batch.cgi",
'num_files' => 1,
'fields' => [ 'batchnum', 'format', 'gatewaynum' ],
'url' => $cgi->self_url,
'message' => 'Batch results uploaded.',
-) %>
-Upload results<BR></TR>
-<TR>
-<% include('/elements/file-upload.html',
+&>
+ Upload results<BR>
+ <& /elements/file-upload.html,
'field' => 'file',
'label' => 'Filename',
'no_table' => 1,
-) %>
-<INPUT TYPE="hidden" NAME="batchnum" VALUE="<% $batchnum %>">
-<BR></TR>
+ &>
+ <INPUT TYPE="hidden" NAME="batchnum" VALUE="<% $batchnum %>">
+ <BR>
% if ( $fixed ) {
% if ( $fixed eq 'td_eft1464' ) { # special case
-<TR>Upload in format <SELECT NAME="format">
-<OPTION VALUE="td_eftack264">TD EFT Acknowledgement</OPTION>
-<OPTION VALUE="td_eftret80">TD EFT Returned Items</OPTION>
-</SELECT> </TR>
+ Upload in format <SELECT NAME="format">
+ <OPTION VALUE="td_eftack264">TD EFT Acknowledgement</OPTION>
+ <OPTION VALUE="td_eftret80">TD EFT Returned Items</OPTION>
+ </SELECT>
% }
% else {
-<INPUT TYPE="hidden" NAME="format" VALUE="<% $fixed %>">
+ <INPUT TYPE="hidden" NAME="format" VALUE="<% $fixed %>">
% }
% }
% else {
-<TR>Upload in format <SELECT NAME="format">
+ Upload in format <SELECT NAME="format">
% foreach ( keys(%upload_formats) ) {
-<OPTION VALUE="<%$_%>"><% $upload_formats{$_} %></OPTION>
+ <OPTION VALUE="<%$_%>"><% $upload_formats{$_} %></OPTION>
% }
-</SELECT>
-<& .select_gateway &>
+ </SELECT>
+ <& .select_gateway &>
% } # if $fixed
-<TR><INPUT TYPE="submit" VALUE="Upload"></TR>
+ <INPUT TYPE="submit" VALUE="Upload">
</FORM><BR>
% } # end upload
@@ -74,12 +90,12 @@ Upload results<BR></TR>
% and $payby eq 'CHEK'
% and $conf->exists('batch-manual_approval')
% ) {
-<TR><INPUT TYPE="button" VALUE="Manually approve" onclick="
+<INPUT TYPE="button" VALUE="Manually approve" onclick="
if ( confirm('Approve all remaining payments in this batch?') )
window.location.href='<%$p%>misc/process/pay_batch-approve.cgi?batchnum=<%$batchnum%>';
-"></TR>
+">
+<BR>
% } # end manual approval
-</TABLE>
% # summary info
Batch is <% $statustext{$status} %><BR>
@@ -119,19 +135,19 @@ my $batchnum = $pay_batch->batchnum;
my $fixed = $conf->config("batch-fixed_format-$payby");
tie my %download_formats, 'Tie::IxHash', (
-'' => 'Default batch mode',
-'NACHA' => '94 byte NACHA',
-'csv-td_canada_trust-merchant_pc_batch' =>
- 'CSV file for TD Canada Trust Merchant PC Batch',
-'csv-chase_canada-E-xactBatch' =>
- 'CSV file for Chase Canada E-xactBatch',
-'PAP' => '80 byte file for TD Canada Trust PAP Batch',
-'BoM' => 'Bank of Montreal ECA batch',
-'ach-spiritone' => 'Spiritone ACH batch',
-'paymentech' => 'XML file for Chase Paymentech',
-'RBC' => 'Royal Bank of Canada PDS batch',
-'td_eft1464' => '1464 byte file for TD Commercial Banking EFT',
-'eft_canada' => 'EFT Canada CSV batch',
+ '' => 'Default batch mode',
+ 'NACHA' => '94 byte NACHA',
+ 'csv-td_canada_trust-merchant_pc_batch' =>
+ 'CSV file for TD Canada Trust Merchant PC Batch',
+ 'csv-chase_canada-E-xactBatch' =>
+ 'CSV file for Chase Canada E-xactBatch',
+ 'PAP' => '80 byte file for TD Canada Trust PAP Batch',
+ 'BoM' => 'Bank of Montreal ECA batch',
+ 'ach-spiritone' => 'Spiritone ACH batch',
+ 'paymentech' => 'XML file for Chase Paymentech',
+ 'RBC' => 'Royal Bank of Canada PDS batch',
+ 'td_eft1464' => '1464 byte file for TD Commercial Banking EFT',
+ 'eft_canada' => 'EFT Canada CSV batch',
# insert new batch formats here
);
@@ -150,4 +166,5 @@ my $count_query = "SELECT COUNT(*) FROM cust_pay_batch WHERE batchnum=$batchnum"
my $count = FS::Record->scalar_sql($count_query);
my $sum_query = "SELECT SUM(amount) FROM cust_pay_batch WHERE batchnum=$batchnum";
my $total = sprintf("%.2f", FS::Record->scalar_sql($sum_query));
+
</%init>