sub csv : Local { my ( $self, $c ) = @_; my $konf = ECS::Inkasso::Konfig->new($c); my $vid = $c->req->{parameters}->{vorgang_id}; my $to_in = $konf->{location}->{csv_upload}."/incoming"; my $to_ok = $konf->{location}->{csv_upload}."/ok"; my $to_err = $konf->{location}->{csv_upload}."/error"; eval { if ( my $upload = $c->request->upload('my_file') ) { $upload = FileSystemObjects::File->new( $upload->{tempname} ); my $md5 = $upload->content_md5_file('hex'); die "Diese Datei ist bereits in Bearbeitung.\n" if -e "$to_in/$md5"; die "Diese Datei wurde bereits verarbeitet.\n" if -e "$to_ok/$md5"; die "Diese Datei wurde bereits abgelehnt.\n" if -e "$to_err/$md5"; my $xmlrpc = XML::RPC->new('http://localhost:8080'); my $ping; eval { $ping = $xmlrpc->call( 'inkasso.ping', 3, {'wait'=>0 } ) }; if ( $ping =~ /^\d+$/ ) { $upload->move( "$to_in/$md5" ); eval { $xmlrpc->call( 'inkasso.csv_importieren', 1, { auth => { id => 1, pwd => "derJochen" }, token => $upload->name, }); }; $c->res->redirect($c->req->base."/forderung/importieren/import_laeuft?token=".$upload->name); } else { die "Webservice nicht verfügbar.\n"; } } else { $self->my_forward( $c, content_template => 'forderung/importieren/csv' ); } }; if ( $@ ) { $self->my_forward( $c, content_template => 'allgemein/error', error_msg => $@ ); } } sub import_laeuft : Local { my ( $self, $c ) = @_; my $token = $c->request->{parameters}->{token} || die "no token!\n"; die "malformed token!\n" unless $token =~ /^[a-f0-9]+$/i; $c->stash->{token} = $token; $self->my_forward( $c, content_template => 'forderung/importieren/progress_bar' ); } ####

CSV - Import läuft

Bitte warten Sie ab bis die Prüfung abgschlossen ist und sie ein Ergebnis sehen.

Benutzen Sie dann die weiterführenden Links.

##
## function check_progress (base_url, token, to, pwidth) { poll_token(base_url, token, to, pwidth); } function poll_token (base_url, token, to, pwidth) { var a = new Ajax.Request ( base_url + '/progress/get?token=' + token, { method: 'get', onSuccess: function(t) { var s = t.responseText.toString(); if ( s.search(/^(\d+\.\d+)\t(.+)/) > -1 ) { var a = s.match( /^(\d+\.\d+)\t(.+)/ ); var prozent = a[1]; var meldung = a[2]; var p = 1 / (100/prozent); if ( pwidth == null ) { pwidth='200'; } var l = pwidth * p; var r = pwidth * (1 - p); $(to + '_label').innerHTML = meldung + "( " + prozent + "% )"; $(to + '_done').style.width = l.numberFormat('#') + "px"; $(to + '_left').style.width = r.numberFormat('#') + "px"; var f = function () { poll_token(base_url,token,to, pwidth); }; setTimeout(f,500); } else { if ( s.search(/^ok/i) > -1 ) { $(to + '_done').style.width = pwidth + "px"; $(to + '_done').style.background = 'green'; $(to + '_label').style.color = 'green'; $(to + '_label').innerHTML = "abgeschlossen ( 100% )"; $(to + '_left').style.width = "0px"; $(to + '_ok').style.display = 'inline'; return true; } if ( s.search(/^error/i) > -1) { $(to + '_done').style.background = 'red'; $(to + '_label').style.color = 'red'; $(to + '_error').style.display = 'inline'; return false; } var f = function () { poll_token(base_url,token,to, pwidth); }; setTimeout(f,500); } }, onFailure:function(t) { alert('Fehler beim Zugriff auf Webserver: ' + t.status + ' -- ' + t.statusText); }, asynchronous:!check_sync }); } #### package ECSInkassoWeb::Controller::Progress; use strict; use warnings; use Data::Dumper; use base qw(Catalyst::Controller ECSInkassoWeb::Controller::Base); use FileSystemObjects::File; sub get : Local { my ( $self, $c ) = @_; my $token = $c->req->{parameters}->{token}; my $konfig = ECS::Inkasso::Konfig->new($c); my $f = FileSystemObjects::File->new( $konfig->{location}->{progress} ."/$token" ); my $h = $f->open("<"); $_ = <$h>; chomp; $c->response->headers->header('content-type' => "text/plain; charset=UTF-8"); $c->response->body( $_ ); } 1;