reliably start batch download, #947
authormark <mark>
Tue, 16 Aug 2011 02:09:53 +0000 (02:09 +0000)
committermark <mark>
Tue, 16 Aug 2011 02:09:53 +0000 (02:09 +0000)
httemplate/elements/progress-init.html
httemplate/misc/download-bill_batch.html
httemplate/search/bill_batch.cgi

index 9f17370..2ec248e 100644 (file)
@@ -54,7 +54,10 @@ sub process_whatever { #class method
            )
 %>
 
-<% include('/elements/init_overlib.html') %>
+% if (!$noinit) { 
+<& /elements/init_overlib.html &>
+%   $noinit = 1;
+% }
 
 <SCRIPT TYPE="text/javascript">
 
@@ -114,6 +117,9 @@ function <%$key%>myCallback( jobnum ) {
 
 </SCRIPT>
 
+<%once>
+my $noinit = 0;
+</%once>
 <%init>
 
 my( $formname, $fields, $action, $url_or_message, $key ) = @_;
@@ -126,6 +132,7 @@ if ( ref($url_or_message) ) { #its a message or something
     if $url_or_message->{'url'};
   $url_or_message_link = 'popup_url=' .uri_escape( $url_or_message->{'popup_url'} )
     if $url_or_message->{'popup_url'};
+
 } else {
   $url_or_message_link = "url=$url_or_message";
 }
index 70e3003..9b5f1ef 100644 (file)
@@ -12,10 +12,15 @@ $m->clear_buffer;
 $r->content_type('application/pdf');
 $r->headers_out->add( 'Content-Disposition' => 
   'attachment;filename="invoice_batch_'.$batchnum.'.pdf"');
+my $cookie = CGI::Cookie->new(
+  -name => "bill_batch_download",
+  -value => $batchnum,
+  -expires => '+1d',
+);
+$r->headers_out->add( 'Set-Cookie' => $cookie->as_string );
 $m->print($content);
 
-#$batch->pdf('');
-#my $error = $batch->replace;
-#  warn "error deleting cached PDF: '$error'\n" if $error;
-#}
+$batch->pdf('');
+my $error = $batch->replace;
+warn "error deleting cached PDF: '$error'\n" if $error;
 </%init>
index cbd7f27..b6676f2 100755 (executable)
@@ -1,18 +1,31 @@
 % my $batchnum = $cgi->param('download');
 % if ( $batchnum =~ /^\d+$/ ) {
-%   $cgi->delete('download');
+%   my $download = $p."misc/download-bill_batch.html?$batchnum";
 <HTML>
 <HEAD><TITLE>Starting download...</TITLE>
 <SCRIPT TYPE="text/javascript">
-function refreshParent() {
-  window.top.setTimeout("window.top.location.href = '<% $cgi->self_url %>'", 2000);
-  window.top.location.replace('<%$p%>misc/download-bill_batch.html?<%$batchnum%>');
+function start() {
+  window.location.replace('<% $download %>');
 }
 </SCRIPT>
-</HEAD><BODY onload="refreshParent();">
+<!--[if lte IE 7]>
+<SCRIPT TYPE="text/javascript">function start() {}</SCRIPT>
+<![endif]-->
+</HEAD>
+<BODY onload="start()" STYLE="background-color:#ccccff">
+<TABLE STYLE="height:125px; width:100%; text-align:center"><TR><TD STYLE="vertical-align:middle;text-align:center">
+<A HREF="<% $download %>">Click here if your download does not start</A>
+</TD></TR></TABLE>
 <& /elements/footer.html &>
 % }
 % else {
+%# delete existing download cookie
+%   my $cookie = CGI::Cookie->new(
+%     -name => 'bill_batch_download',
+%     -value => 0,
+%     -expires => '-1d',
+%   );
+%   $r->headers_out->add( 'Set-Cookie' => $cookie->as_string );
 <% include( 'elements/search.html',
                  'title'         => 'Invoice Batches',
                 'name_singular' => 'batch',
@@ -52,11 +65,30 @@ function refreshParent() {
                  'agent_virt' => 1,
                  'agent_null_right' => [ 'Process global invoice batches', 'Configuration' ],
                  'agent_pos' => 1,
+                 'html_foot' => include('.foot'),
 
       )
 
 %>
 %}
+<%def .foot>
+<SCRIPT type="text/javascript">
+var timer;
+function checkDownloadStatus(batchnum) {
+  var re = new RegExp('bill_batch_download=' + batchnum);
+  if ( re.test(document.cookie) ) {
+    window.clearInterval(timer);
+    window.location.reload();
+  }
+}
+function startBatch(batchnum) {
+  timer = window.setInterval(function() { 
+      checkDownloadStatus(batchnum);
+  }, 2000);
+  eval('batch'+batchnum+'process()');
+}
+</SCRIPT>
+</%def>
 <%init>
 
 my $curuser = $FS::CurrentUser::CurrentUser;
@@ -76,8 +108,6 @@ my $count_query = "SELECT COUNT(*) FROM bill_batch WHERE". # $extra_sql AND "
 #my $extra_sql = ''; # may add something here later
 my $link = [ "${p}view/bill_batch.cgi?batchnum=", 'batchnum' ];
 
-my $download_id = int(rand(1000000));
-
 sub download_link {
   my $batch = shift;
   my $batchnum = $batch->batchnum;
@@ -90,10 +120,10 @@ sub download_link {
     "Download$batchnum",
     [ 'batchnum', 'close' ],
     $p.'misc/process/bill_batch-print.html',
-    { url => $p."search/bill_batch.cgi?download=$batchnum" },
+    { popup_url => $p."search/bill_batch.cgi?download=$batchnum" },
     "batch$batchnum" #key
   );
-  $html .= '<A href="#" onclick="batch'.$batchnum.'process();">' .
+  $html .= '<A href="#" onclick="startBatch('.$batchnum.');">' .
   ($batch->status eq 'O' ? '<B>Download and close</B>' : 'Download');
   $html .= '</A></FORM>';
   return $html;