File Coverage

blib/lib/Finance/Bank/Commerzbank.pm
Criterion Covered Total %
statement 10 12 83.3
branch n/a
condition n/a
subroutine 4 4 100.0
pod n/a
total 14 16 87.5


line stmt bran cond sub pod time code
1             package Finance::Bank::Commerzbank;
2 1     1   15318 use strict;
  1         3  
  1         63  
3 1     1   15 use Carp;
  1         2  
  1         4204  
4             our $VERSION = '0.29';
5              
6 1     1   2671 use WWW::Mechanize;
  1         274529  
  1         40  
7 1     1   1679 use WWW::Mechanize::FormFiller;
  0            
  0            
8             use URI::URL;
9             our $ua = WWW::Mechanize->new( autocheck => 1 );
10             our $formfiller = WWW::Mechanize::FormFiller->new();
11             use Time::localtime;
12              
13             sub check_balance {
14             my ($class, %opts) = @_;
15             my %HashOfAccounts;
16             croak "Must provide a Teilnehmernummer"
17             unless exists $opts{Teilnehmernummer};
18             croak "Must provide a PIN"
19             unless exists $opts{PIN};
20             my $self = bless { %opts }, $class;
21            
22             $ua->env_proxy();
23             $ua->get('https://portal01.commerzbanking.de/P-Portal/XML/IFILPortal/pgf.html?Tab=1');
24             $ua->form(1) if $ua->forms and scalar @{$ua->forms};
25             $ua->form_number(4);
26             {
27             local $^W; $ua->current_form->value('PltLogin_8_txtTeilnehmernummer', $opts{Teilnehmernummer});
28             }
29             ;
30             {
31             local $^W; $ua->current_form->value('PltLogin_8_txtPIN', $opts{PIN});
32             }
33             ;
34             $ua->click('PltLogin_8_btnLogin');
35             my @links=$ua->find_all_links();
36             my $n;
37             for ($n=0;$n<$#links;$n++) {
38             my ($url,$title)=@{$links[$n]};
39             if ($opts{"debug"} eq "1") {
40             print "LINK------>".$n." - ".$title."\n";
41             }
42             }
43             if (0) {
44             $ua->follow_link(text=>"Kontoübersicht");
45             my $Overview=$ua->content;
46             my $Konto;
47             while (index($Overview,"PltViewAccountOverview_8_STR_KontoNummer")>-1) {
48             $Konto=substr ($Overview,index($Overview,"PltViewAccountOverview_8_STR_KontoNummer")+46,15);
49             $Overview=substr ($Overview,index($Overview,"PltViewAccountOverview_8_STR_KontoNummer")+46);
50             if ($opts{"debug"} eq "1") {
51             print $Konto."\n";
52             }
53             }
54             }
55             $ua->follow_link(text => "Kontoumsätze");
56             @links=$ua->find_all_links();
57             for ($n=0;$n<$#links;$n++) {
58             my ($url,$title)=@{$links[$n]};
59             print "LINK------>".$n." - ".$title."\n";
60             }
61            
62             if ($opts{"debug"} eq "1") {
63             write_file($ua->content,"/tmp/Commerzbank-0");
64             }
65             if ( $ua->form_number(5)) {
66             if ($opts{"debug"} eq "1") {
67             write_file($ua->content,"/tmp/Commerzbank-1");
68             }
69             {
70             local $^W; $ua->current_form->value('PltViewAccountTransactions_8_STR_CodeZeitrahmen', '90 Tage');
71             local $^W; $ua->current_form->value('PltViewAccountTransactions_8_STR_KontoNr', $opts{Kontonummer});
72             }
73             ;
74             my $response= $ua->click('PltViewAccountTransactions_8_btnAnzeigen');
75             write_file($ua->content,"/tmp/Account");
76             $ua->form_number(4);
77             $ua->click('PltHomeTeaser_3_btnLogout');
78             } else {
79             print "Could not log on - wait timeout detected..\n";
80             }
81            
82            
83            
84             use HTML::TableContentParser;
85             my $p = HTML::TableContentParser->new();
86            
87             open(IN,"
88             my $Data;
89             my $go;
90             while () {
91             if (index($_,"Buchungstag")>-1) {
92             $go=1;
93             }
94             if ($go) {
95             $Data.=$_;
96             }
97             }
98             if ( ($opts{"debug"} ne "1") && ( -r "/tmp/Account" )) {
99             # We remove the temporary file only in non-debug mode...
100             `rm /tmp/Account`;
101             }
102            
103             my $tables = $p->parse($Data);
104             my $t;
105             my $r;
106             my @accounts;
107             for $t (@$tables) {
108             my $j=0;
109             for $r (@{$t->{rows}}) {
110             my $i=0;
111             my $IsOk=0;
112             my $c;
113             my @line;
114             for $c (@{$r->{cells}}) {
115             # print "CELL :$i\n";
116             my $Data;
117             if (($i == 1 ) || ($i == 5 )|| ($i == 7 ) ) {
118            
119             $Data=substr($c->{data},index($c->{data},"tablehead1")+12,1000);
120             $Data =~ s/<\/span>
//g;
121             $Data =~s/
/#/g;
122             my $year=localtime->year()+1900;
123             my $year_before=localtime->year()+1900-1;
124             if (($i ==1 ) && ( (index($Data,$year)>-1) || (index($Data,$year_before)>-1))) {
125             $IsOk=1;
126             $j++;
127             # print "Transaction - $j:";
128             }
129             if ($IsOk) {
130             push @line,$Data;
131             # print "Push IsOK".$Data.";";
132             }
133             }
134             if ($i == 10) {
135             # print "[$c->{data}]";
136             if (index($c->{data},'"red">')> -1) {
137             $Data=substr($c->{data},index($c->{data},"red")+5,1000);
138             }
139             if (index($c->{data},'"green">')> -1) {
140             $Data=substr($c->{data},index($c->{data},"green")+7,1000);
141             }
142             $Data =~ s/<\/span>
//g;
143             if ($IsOk) {
144             $Data =~ s/\.//g;
145             push @line,$Data;
146             push @accounts, (bless {
147             TradeDate => $line[0],
148             Description => $line[1],
149             ValueDate => $line[2],
150             Amount => $line[3],
151             parent => $self
152             }, "Finance::Bank::Commerzbank::Account");
153             }
154             }
155             $i++;
156             }
157             }
158             }
159             return @accounts;
160             }
161              
162             sub money_transfer {
163             my ($class, %opts) = @_;
164             #Checking all necessary InputParameters
165             croak "Must provide : Teilnehmernummer"
166             unless exists $opts{Teilnehmernummer};
167             croak "Must provide : PIN"
168             unless exists $opts{PIN};
169             croak "Must provide : TANPIN"
170             unless exists $opts{TANPIN};
171             croak "Must provide : EmpfaengerName"
172             unless exists $opts{EmpfaengerName};
173             croak "Must provide : EmpfaengerKtoNr"
174             unless exists $opts{EmpfaengerKtoNr};
175             croak "Must provide : EmpfaengerBLZ"
176             unless exists $opts{EmpfaengerBLZ};
177             croak "Must provide : Betrag_Eingabe"
178             unless exists $opts{Betrag_Eingabe};
179              
180             my $self = bless { %opts }, $class;
181            
182             $ua->env_proxy();
183            
184             $ua->get('https://portal01.commerzbanking.de/P-Portal/XML/IFILPortal/pgf.html?Tab=1');
185             $ua->form(1) if $ua->forms and scalar @{$ua->forms};
186             $ua->form_number(4);
187             {
188             local $^W; $ua->current_form->value('PltLogin_8_txtTeilnehmernummer', $opts{Teilnehmernummer});
189             }
190             ;
191             {
192             local $^W; $ua->current_form->value('PltLogin_8_txtPIN', $opts{PIN});
193             }
194             ;
195             $ua->click('PltLogin_8_btnLogin');
196             my @links=$ua->find_all_links();
197             my $n;
198             for ($n=0;$n<$#links;$n++) {
199             my ($url,$title)=@{$links[$n]};
200             print "LINK------>".$n." - ".$title."\n";
201            
202             }
203             $ua->follow_link(text => "Inlandsüberweisung");
204             @links=$ua->find_all_links();
205             for ($n=0;$n<$#links;$n++) {
206             my ($url,$title)=@{$links[$n]};
207             print "LINK------>".$n." - ".$title."\n";
208            
209             }
210             if ($opts{"debug"} eq "1") {
211             write_file($ua->content,"/tmp/Commerzbank-0");
212             }
213             if ( $ua->form_number(5)) {
214             if ($opts{"debug"} eq "1") {
215             write_file($ua->content,"/tmp/Commerzbank-1");
216             }
217             {
218             local $^W; $ua->current_form->value('PltManageDomesticTransfer_8_STR_EmpfaengerName', $opts{EmpfaengerName});
219             }
220             ;
221             {
222             local $^W; $ua->current_form->value('PltManageDomesticTransfer_8_STR_EmpfaengerKtoNr', $opts{EmpfaengerKtoNr});
223             }
224             ;
225             {
226             local $^W; $ua->current_form->value('PltManageDomesticTransfer_8_STR_EmpfaengerBLZ', $opts{EmpfaengerBLZ});
227             }
228             ;
229             {
230             local $^W; $ua->current_form->value('PltManageDomesticTransfer_8_DBL_Betrag_Eingabe',$opts{Betrag_Eingabe});
231             }
232             ;
233             {
234             local $^W; $ua->current_form->value('PltManageDomesticTransfer_8_STR_Verwendungszweck1', $opts{Verwendungszweck1});
235             }
236             ;
237             {
238             local $^W; $ua->current_form->value('PltManageDomesticTransfer_8_STR_Verwendungszweck2', $opts{Verwendungszweck2});
239             }
240             ;
241             {
242             local $^W; $ua->current_form->value('PltManageDomesticTransfer_8_STR_Verwendungszweck3', $opts{Verwendungszweck3});
243             }
244             ;
245             {
246             local $^W; $ua->current_form->value('PltManageDomesticTransfer_8_STR_Verwendungszweck4', $opts{Verwendungszweck4});
247             }
248             ;
249             {
250             local $^W; $ua->current_form->value('PltManageDomesticTransfer_8_CBO_Konten', $opts{Auftragskonto});
251             }
252             ;
253             print "Empfaenger :".$opts{EmpfaengerName}."\n";
254             print "Empfaenger Kto :".$opts{EmpfaengerKtoNr}."\n";
255             print "Empfaenger BLZ :".$opts{EmpfaengerBLZ}."\n";
256             print "Empfaenger Betrag:".$opts{Betrag_Eingabe}."\n";
257             print "VZ 1 :".$opts{Verwendungszweck1}."\n";
258             print "VZ 2 :".$opts{Verwendungszweck2}."\n";
259             print "VZ 3 :".$opts{Verwendungszweck3}."\n";
260             print "VZ 4 :".$opts{Verwendungszweck4}."\n";
261             my $response= $ua->click('PltManageDomesticTransfer_8_btnPruefenDomestic');
262             #$ua->click('PltManageDomesticTransfer_8_btnPruefenDomestic');
263             sleep(3);
264             $ua->form_number(5);
265             {
266             local $^W; $ua->current_form->value('PltManageDomesticTransfer_8_STR_FECAF5D9B9AF914896', $opts{TANPIN});
267             #The Form has changed.... below the old input for the tan
268             #local $^W; $ua->current_form->value('PltManageDomesticTransfer_8_txtTANPIN', $opts{TANPIN});
269             }
270             ;
271             $ua->click('PltManageDomesticTransfer_8_btnFreigebenDomestic');
272             $ua->form_number(4);
273              
274              
275             if ($opts{"debug"} eq "1") {
276             write_file($ua->content,"/tmp/Commerzbank-2");
277             }
278             $ua->form_number(4);
279             $ua->click('PltHomeTeaser_3_btnLogout');
280             } else {
281             print "Could not log on - wait timeout detected..\n";
282             }
283            
284            
285             }
286              
287             sub write_file {
288             my ($Data,$FileName)=@_;
289             open( OUT , ">".$FileName);
290             print OUT $Data;
291             close(OUT);
292             }
293              
294              
295              
296              
297             package Finance::Bank::Commerzbank::Account;
298             # Basic OO smoke
299             no strict;
300             sub AUTOLOAD { my $self=shift; $AUTOLOAD =~ s/.*:://; $self->{$AUTOLOAD} }
301              
302             __END__